2012-06-04 3 views
1

A,B,C and D 하위 디렉토리가있는 폴더가 있습니다. 디렉토리 A and D'copy'이라는 다른 디렉토리에 복사해야하며 B and C은 제외해야합니다 (예 : B와 C는 복사되지 않습니다).ls에서 특정 디렉토리를 제외하고 나머지를 공유 경로에 복사하십시오.

ls (selective ls on the source directory) | 
    scp -r {returned value from the ls} {target directory} 

위를 달성하는 리눅스 명령 줄 방법이 있나요 : 나는 (명령 줄 의사 코드) 다음을 수행 대해 생각했다? 당신이 정말로 당신의 디렉토리를 알고 있다면

답변

2

간단한 대답은 당신이 원하는 디렉토리를 복사하는 것입니다 문제가 나던 :

scp -r A D anotherhost:/path/to/target/directory 

이것은 당신이 당신의 예에 기술 한 내용을 정확히 할 것입니다. 소스 디렉토리에있는 파일의 수는 큰 아니므로이 명령은 한 작동합니다

scp -r $(ls | egrep -v '^(B|C)$') anotherhost:/path/to/target/directory 

: 더 일반적인 솔루션은 다음과 같이 표시 될 수 있습니다. 파일 수가 늘어 나면 결국 "명령이 너무 오래되었습니다"오류가 발생합니다.

scp을 사용하는 대신 파일 포함/제외에 대한 다양한 메커니즘이있는 rsync을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

rsync --exclude='B/' --exclude='C/' . anotherhost:/path/to/target/directory 
0

, 단순히 SCP에 모두 추가 :

scp A/* D/* targetHost:/copy 

이 솔루션에 대한 유일한 문제는, 그것은 "믹스"라는 파일을 복사 디렉토리에. 아마, 그것은 :-)

3

찾을 것이 좋습니다.

$ ls -R ./testing/ 
./testing/: 
copy test1 test2 test3 test4 

./testing/copy: 
test2 test4 

./testing/copy/test2: 
testa testb 

./testing/copy/test4: 
testa testb 

./testing/test1: 
testa testb 

./testing/test2: 
testa testb 

./testing/test3: 
testa testb 

./testing/test4: 
testa testb 
: 발생합니다
$ mkdir ./testing/copy 
$ find ./testing/ -mindepth 1 -maxdepth 1 ! -name test1 ! -name test3 ! -name copy -execdir cp -R '{}' ./copy/ ';' 

을 실행, 지금

$ ls -R ./testing 
./testing: 
test1 test2 test3 test4 

./testing/test1: 
testa testb 

./testing/test2: 
testa testb 

./testing/test3: 
testa testb 

./testing/test4: 
testa testb 

:

$ mkdir -p ./testing/test{1,2,3,4} 
$ touch ./testing/test{1,2,3,4}/test{a,b} 

가 발생합니다 :

의 일부 시험 과목을 만들어 보자 0

배경 정보 :

요약 : 복사해야 할 디렉토리를 찾아 복사 명령을 실행하십시오. 이 경우 'test1'과 'test3'을 제외하고 모든 디렉토리를 복사 해 봅시다.

-mindepth 1 옵션으로 찾을 수 없습니다. 가능하면 .. 디렉토리가 깊이 0에 있기 때문에.

-maxdepth 1 옵션을 사용하면 find가 모든 단일 하위 디렉토리를 개별적으로 복사하지 못하게 할 수 있습니다. cp -R 명령은 하위 디렉토리를 처리하므로 해당 디렉토리가 포함됩니다.

-exec 대신 -execdir을 사용하면 전체 경로를 cp 명령의 대상 디렉토리로 포함 할 필요가 없습니다.

찾기를 실행하기 전에 대상 디렉토리를 mkdir하는 것을 잊지 마십시오. 결과에서이 디렉토리를 제외하는 것을 잊지 마십시오! 따라서 ! 예제에서는 옵션을 복사하십시오.

나는 이것이 올바른 방향으로 당신을 나타낼 것을 바랍니다.