특정 유형의 모든 파일을 Unix의 디렉토리로 어떻게 이동 (또는 복사) 할 수 있습니까? 익숙하지 않습니다 . 특정 패턴과 일치하는 파일이

나는 grep/find/awk/xargs아직 모든 트릭에 익숙하지 않습니다 .

특정 패턴과 일치하는 파일이 *.xxx있습니다. 이러한 파일은 특정 디렉토리에서 임의의 위치에 있습니다. 이러한 파일을 모두 찾아서 Unix의 내 홈 디렉토리에있는 폴더로 옮기려면 어떻게해야합니까?



답변

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


답변

당신은 (넣어 ≥4 bash는, 하나의 대상 디렉토리에 디렉토리 계층 내부의 모든 파일을 이동하려면 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의 확장 {}).


답변

일치하는 소스 파일의 디렉토리 구조를 새 대상 디렉토리에 복제하려는 경우 GNU cp의 –parents 옵션 을 사용할 수 있습니다 .

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


답변

당신은없이 찾기를 사용할 수 있습니다 -exec‍뿐만 아니라 :

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


답변