Linux 터미널을 사용하여 현재 디렉토리의 모든 항목을 하위 디렉토리로 복사하려면 어떻게해야합니까?
답변
폴더의 내용을 재귀 적으로 복사하려면 (아래 오류 1이 발생합니다) :
cp -r * sub/
조금 더 해킹되었지만 비어 있지 않은 하위 디렉토리에서 작동합니다.
TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"
다른 oneliner :
TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done
또는 재귀 :
TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
답변
target
쉘이 bash 인 경우 대상 서브 디렉토리의 이름이라고 가정 하십시오.
shopt -s extglob
cp -r !(target) target/
ksh에서는 직접 할 수 있습니다 cp -r !(target) target/
.
zsh을, 당신은 할 수있는 setopt ksh_glob
다음 cp -r !(target) target/
. 또 다른 가능성은 setopt extended_glob
다음과 같습니다 cp -r ^target target/
.
답변
대상 디렉토리를 소스 디렉토리 외부로 옮긴 다음 다시 놓는 것이 좋습니다. 다른 프로세스가 간섭 / 간섭 될 것으로 예상하지 않는 한 mv는 무료입니다 (다른 파일 시스템으로 이동하지 않도록주의 할 경우).
파일 이름에 공백이 있으면 위에 게시 된 대부분의 솔루션이 작동하지 않습니다. find -print0 | xargs -0 또는 찾기 -exec 등
답변
이것이 당신을 위해 작동합니까?
cp -r * subdir/
현재 디렉토리의 모든 것을 서브 디렉토리로 복사하는 대신 이동하려는 경우 다음을 수행 할 수 있습니다.
mv * subdir/
답변
대상 디렉토리 자체를 포함하지 않고 도트 파일을 포함하여 모든 것을 대상 디렉토리에 복사합니다 SUBDIR
.
for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done
답변
이것은 dirCopy.sh 파일이라고합니다.
for i in `ls`
do
if [ $i != "subDir" ]
then
`cp -r $i subDir`
fi
done
콘솔에서 “sh dirCopy.sh”로 실행하십시오.