나는 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