.html
모든 파일 myDir
과 해당 하위 디렉터리를 에 복사하고 싶습니다 ~/otherDir
. 시도해 보았지만 작동하지 않습니다.
$ find myDir -name *.html -print | xargs -0 cp ~/otherDir
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
답변1
먼저, 쉘이 "*"와 일치합니다. 이스케이프 \
또는 따옴표를 사용하십시오 .*.html
이와 같이:
find myDir -name "*.html"
또는find myDir -name \*.html
xargs
with 스위치 find
를 사용하여 건너뜁니다 -exec
.
find myDir -name "*.html" -exec cp {} ~/otherDir \;
{}
이는 발견된 파일을 대체 find
하고 일치하는 항목마다 한 번씩 수행하기 때문에 작동합니다 .
또한 이렇게 하면 소스 디렉터리의 복사본이 평면화됩니다. 예:
myDir/a.html
myDir/b/c.html
생산할 것이다
otherdir/a.html
otherdir/c.html
답변2
.html
그러면 특정 소스 디렉터리와 그 하위 디렉터리에 있는 모든 파일을 단일 디렉터리에 복사 하고 싶습니까 (즉, 계층 구조 축소)?
POSIX기준:
find myDir -name '*.html' -type f -exec sh -c 'cp "$@" "$0"' ~/otherDir {} +
중간 쉘 은 ~/otherDir
매개변수 0이 되어 소스 파일을 "$@"
. 쉘 외부에 대상 디렉토리를 두면 대상 디렉토리가 상위 쉘 스크립트( )의 변수인 경우 참조 문제가 발생하지 않는다는 추가 이점이 있습니다 -exec sh -c 'cp "$@" "$0"' "$target"
.
다음이 없는 구형 시스템의 경우 find … -exec … +
:
find myDir -name '*.html' -type f -exec cp {} ~/otherDir \;
내 쉘은 bash ≥4 또는 zsh입니다.
shopt -s globstar # only for bash, put it in your `.bashrc`
cp myDir/**/*.html ~/otherDir/
답변3
find myDir -name '*.html' -print0 | xargs -0 -J % cp % ~/otherdir
답변4
OSX는 조회를 위해 -execdir을 지원합니까?
find ./myDir -name "*.html" -execdir cp {} /abspath/to/otherDir ";"
Gnu/find는 대부분의 경우 -exec 대신 -execdir을 사용할 것을 권장합니다.