특정 유형의 모든 파일을 Unix의 특정 디렉토리로 이동(또는 복사)하는 방법은 무엇입니까?

특정 유형의 모든 파일을 Unix의 특정 디렉토리로 이동(또는 복사)하는 방법은 무엇입니까?

grep/find/awk/xargs아직은 모든 ​​기술에 익숙하지 않습니다.

특정 패턴과 일치하는 파일이 있습니다(예: ) *.xxx. 이 파일은 일부 디렉토리의 임의 위치에 있습니다. 이러한 파일을 모두 찾아서 Unix의 홈 디렉터리(아직 없을 수도 있음)에 있는 폴더로 이동하려면 어떻게 해야 합니까?

답변1

mkdir ~/dst
find source -name "*.xxx" -exec mv -i {} -t ~/dst \;

답변2

디렉터리 계층 구조 내의 모든 파일을 단일 대상 디렉터리로 이동하려면 bash ≥4( shopt -s globstar당신의 것을 넣으세요 ~/.bashrc) 또는 zsh에서:

mkdir ~/new-directory
mv -i **/*.xxx ~/new-directory

다른 쉘에서는:

mkdir ~/new-directory
find . -name '*.xxx' -exec mv -i {} ~/new-directory \;

이 명령을 읽는 방법 find:

  • .: 현재 디렉터리를 탐색합니다.
  • -name '*.xxx': 이름이 이 패턴과 일치하는 파일에 대해 작업합니다.
  • -exec … \;: 각 파일에 대해 이 명령을 실행하고 {}파일 경로로 바꿉니다.

파일이 많은 경우 각 파일에 대해 별도의 프로세스를 호출할 find필요가 없기 때문에 더 빠른 더 복잡한 명령이 있습니다 .mv

find . -name '*.xxx' -exec sh -c 'mv -i "$@" "$0"' ~/new-directory {} +

+마지막 명령은 find한 번에 여러 파일에 대해 명령을 호출하라고 알려줍니다. find파일 이름은 명령줄 끝에만 입력할 수 있고 대상 mv디렉터리는 마지막에 와야 하므로 중간 쉘을 사용하여 인수를 재정렬합니다( "$0"쉘에 대한 첫 번째 인수인 는 ~/new-directory후속 "$@"인수 find를 확장한 것 입니다 {}). .

답변3

소스 파일과 일치하는 디렉토리 구조를 새 대상 디렉토리에 복사하려면 GNU cp의- 부모옵션:

mkdir /path/to/target_dir
cd source_dir
find . -name '*.xxx' -exec cp -iv --parents -t /path/to/target_dir {} +

답변4

너도 -exec‍:

mkdir /path/to/dest    
cp `find /path/to/source -name "*.jar"` /path/to/dest

관련 정보