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