현재 디렉토리의 내용을 서브 디렉토리로 복사


13

Linux 터미널을 사용하여 현재 디렉토리의 모든 항목을 하위 디렉토리로 복사하려면 어떻게해야합니까?


복사 또는 이동을 의미합니까?
Craig

답변:


12

폴더의 내용을 재귀 적으로 복사하려면 (아래 오류 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

sub /가 비어 있지 않은 경우에는 작동하지 않습니다-> @Oguz가 원하지 않는 한 sub가 다시 sub로 복사됩니다.

Ok 나는 마침내 find코드에 만족한다 : D
Lekensteyn

2
공백이 포함 된 파일 이름에 대해서는 두 번째 명령이 실패합니다. xargs또는을 사용하십시오 -exec. grep사용할 필요가 없습니다 ! -name "$TARGETDIR". 주위에 따옴표가 일치하지 않습니다 $file. 재귀 cp가 첫 번째 명령 이외의 방식으로 작동 한다고 생각하지 않습니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

Wohaa, 마지막 코드에서 인용을 놓쳤다. 좋은 의견 데니스, 나는 :)이 경우 -name를 사용하여 생각하지 않습니다
Lekensteyn

4

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/.


2

대상 디렉토리를 소스 디렉토리 외부로 옮긴 다음 다시 놓는 것이 좋습니다. 다른 프로세스가 간섭 / 간섭 될 것으로 예상하지 않는 한 mv는 무료입니다 (다른 파일 시스템으로 이동하지 않도록주의 할 경우).

파일 이름에 공백이 있으면 위에 게시 된 대부분의 솔루션이 작동하지 않습니다. find -print0 | xargs -0 또는 찾기 -exec 등


0

이것이 당신을 위해 작동합니까?

cp -r * subdir/

현재 디렉토리의 모든 것을 서브 디렉토리로 복사하는 대신 이동하려는 경우 다음을 수행 할 수 있습니다.

mv * subdir/

이것은 비어 있지 않은 디렉토리를 처리하지 않습니다

방금 테스트했는데 효과가있었습니다.
karlphillip

@Lekensteyn이 제안한 것처럼 비어 있지 않은 디렉토리를 재귀 적으로 복사해야합니다.


-1

이것은 dirCopy.sh 파일이라고합니다.



for i in `ls`
do
        if [ $i != "subDir" ]
        then
                `cp -r $i subDir`
        fi
done

콘솔에서 "sh dirCopy.sh"로 실행하십시오.


2
필요 없음 ls: for file in *. 백틱 사용이 필요하지 않습니다 $(). 명령 $()주위 에 백틱 (또는 )이 필요하지 않습니다 ( cp오류 메시지가 생성됨).
추후 공지가있을 때까지 일시 중지되었습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.