디렉토리 계층 구조를 "복사"하여 모든 "파일"이 소스 계층 구조의 실제 파일을 가리키는 심볼릭 링크 일뿐 아니라 디렉토리의 새로운 계층 구조가 작성되는 가장 간단한 방법은 무엇입니까?symlink- 디렉토리 계층 구조 복사
cp -s
은 재귀 적으로 작동하지 않습니다. 원래 & 새로운 디렉토리 위에서 시작
디렉토리 계층 구조를 "복사"하여 모든 "파일"이 소스 계층 구조의 실제 파일을 가리키는 심볼릭 링크 일뿐 아니라 디렉토리의 새로운 계층 구조가 작성되는 가장 간단한 방법은 무엇입니까?symlink- 디렉토리 계층 구조 복사
cp -s
은 재귀 적으로 작동하지 않습니다. 원래 & 새로운 디렉토리 위에서 시작
, 내가 find(1)
명령이 쌍은 당신이 필요로 할 것입니다 생각 :
find original -type d -exec mkdir new/{} \;
find original -type f -exec ln -s {} new/{} \;
첫 번째 인스턴스가 원래의 트리에서만 디렉토리를 찾아 디렉토리 구조를 설정하고 새로운 나무에서 그들을 재현하십시오. 두 번째는 새 트리의 원본 파일에 대한 심볼릭 링크를 만듭니다.
이것은 나를 위해 매우 잘 작동합니다 (위에서 설명한 것처럼 cp -as 또는 -R은 Mac OS X에서 작동하지 않습니다). mkdir과 ln -s에 대한 매개 변수로서 상대 경로를 얻기 위해'(cd origParentDir; origDir .. find; origDir ..)'명령을 사용하는 것이 좋습니다. 서브 쉘에서 cd를 실행하면 임시로 CWD 만 설정되기 때문에 parantheses를 사용하여'('subshell')을 시작하십시오; CWD는 서브 쉘이 종료 될 때 복원됩니다. 예 : '/ src/binutils-2.24'를'$ {HOME}/source'에 '복제'한다면''src' '폴더를 생성하고 싶지 않을 것입니다. –
'ln'은'ln -s -R orig/dir dest/dir'과 같은 재귀 적 옵션을 가지고 있지 않습니다. – jiggunjer
나는 단지 리눅스 박스에서 빠른 테스트를 수행했으며 cp -sR /orig /dest
은 당신이 묘사 한대로 정확하게 수행한다 : 디렉토리가 아닌 디렉토리에 원래의 디렉토리 구조를 갖는 디렉토리 계층 구조를 만든다.
첫 번째 디렉토리 레벨에서만 작동합니다. 하위 디렉토리의 모든 파일에 대해 "xyz-file : 현재 디렉토리에서만 상대적인 심볼릭 링크를 만들 수 있습니다". (우분투 8.10에서, cp 버전 6.10) –
"xyz-file : 현재 디렉토리에서만 상대적인 심볼릭 링크를 만들 수 있습니다"라는 이유는 소스 디렉토리에서 상대 경로를 지정했기 때문입니다. "cp -sR/root/absolute/path/name dest"와 같이 소스의 절대 경로를 지정하면 원하는대로 작동합니다. – PonyEars
모든 symlink를 필요로하거나 만들고 싶다면 다음과 같이 [symlinks] (http://www.linuxcommand.org/man_pages/symlinks8.html)를 사용할 수 있습니다 :'cp -sR/orig/dest && symlinks - rc/dest' –
나는 쉘에 관한 질문을 알고 있지만 쉘에서 펄을 호출 할 수 있기 때문에 몇 년 전 에 posted it을 작성하는 도구를 썼다. 내 경우에는 일반적으로 디렉토리를 달리 결정할 때까지 링크를 유지하기를 원했습니다. 이 작업을 자동으로 재귀 적으로 수행하는 것은 사소한 변화입니다.
그런 일을하는 "lndir"유틸리티 (X에서 제공)가 있습니다. 나는 그것이 여기 언급 한 것을 발견했다 : Debian Bug report #301030: can we move lndir to coreutils or debianutils?, 나는 행복하게 그것을 사용하고있다.
나는 원래 질문자로서 정확한 문제를 가지고 있었고 쉘 스크립트를 코딩하기 시작한 후에이 대답을 발견하고 lndir이 이미 설치되어 있음을 발견했습니다. 내가 필요한만큼 정확하게 작동합니다. – shmuelp
cp -as /root/absolute/path/name dest_dir
원하는대로 할 수 있습니다. 소스 이름은 절대 경로 여야하며 상대 경로 일 수는 없습니다. 그렇지 않으면이 오류가 발생합니다. "xyz-file : 현재 디렉토리에서만 상대적인 심볼릭 링크를 만들 수 있습니다." DEST_DIR이 이미 존재하는 경우, 당신은 같은 것을해야 할 것이다 : 당신이 여기 더러운 손을 받고 기분이 경우
cp -as /root/absolute/path/name/* dest_dir/
cp -as /root/absolute/path/name/.* dest_dir/
을 속임수 또한
, 당신은 복사하는 무엇이에 관한주의 자동으로 대상 폴더를 만들고 하위 폴더를 만들고 모든 파일을 재귀 적으로 심볼릭 링크합니다. 파일이 당신이 심볼릭 링크 할 및 하위 폴더가있는 폴더에서 :는 파일 쉘을 만들 수 있습니다.SH :
#!/bin/bash
export DESTINATION=/your/destination/folder/
export TARGET=/your/target/folder/
find . -type d -print0 | xargs -0 bash -c 'for DIR in "[email protected]";
do
echo "${DESTINATION}${DIR}"
mkdir -p "${DESTINATION}${DIR}"
done' -
find . -type f -print0 | xargs -0 bash -c 'for file in "[email protected]";
do
ln -s "${TARGET}${file}" "${DESTINATION}${file}"
done' -
ctrl+O
ctrl+X
nano shell.sh
는 스크립트 ./shell.sh
해피 해킹 실행 스크립트 실행 chmod 777 shell.sh
합니다!
http://unix.stackexchange.com/q/196537/10047도 참조하십시오. – user905686