한 디렉터리에서 다른 디렉터리로 파일을 선택적으로 복사하는 방법은 무엇입니까?

한 디렉터리에서 다른 디렉터리로 파일을 선택적으로 복사하는 방법은 무엇입니까?

Linux에서 dir1한 디렉터리( )에서 다른 디렉터리( )로 대부분의(전부는 아님) 파일을 선택적으로 복사하는 방법은 무엇입니까 ?dir2

*.c파일을 *.txt에 복사 하고 싶지 않습니다 dir2.

온라인 매뉴얼 페이지는 cp나에게 도움이 될 수 없습니다.

답변1

findeboix의 명령(공백으로 인해 중단되므로 마지막에 한두 가지 더 안전한 방법을 추가하겠습니다) 외에도 다음을 bash사용할 수 있습니다 extglob.

# turn extglob on
shopt -s extglob 
# move everything but the files matching the pattern
mv dir1/!(*.c) -t dir2
# If you want to exclude more patterns, add a pipe between them:
mv dir1/!(*.c|*.txt) -t dir2

bashextglob으로 수행할 수 있는 작업에 대한 자세한 내용은 매뉴얼 페이지를 참조하세요. 이는 재귀적이지 않으므로 dir1하위 디렉터리가 아닌 파일만 직접 이동됩니다. 이 find방법은 재귀적입니다.


더 안전한 find명령:

find dir1 ! -name '*.c' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' -exec mv -t dir2 {} +

더 많은 패턴을 보려면 더 많은 ! -name문을 추가하세요.

find dir1 ! -name '*.c' ! -name '*.txt' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' ! -name '*.txt' -exec mv -t dir2 {} +

답변2

이 시도:

find ./ ! -name '*.c' | xargs -i cp {} dest_dir

답변3

dir1에서 다음 명령을 사용할 수 있습니다.

CP ls|egrep -v .txt\|.c디렉토리 2

" ls|egrep -v .txt\|.c " 섹션에는 이름에 .c 및 .txt가 없는 파일이 나열됩니다. cp는 이를 dir2에 복사합니다.

관련 정보