현재 디렉토리의 내용을 서브 디렉토리로 복사 디렉토리의 모든 항목을 하위 디렉토리로

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”로 실행하십시오.