Osx
如何將所有 HTML 文件從目錄樹複製到單個目錄
我想將所有
.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
首先,shell 會為您匹配“*”。要麼轉義它,
\
要麼使用引號*.html
像這樣:
find myDir -name "*.html"
要麼find myDir -name \*.html
跳過使用
xargs
withfind
的-exec
開關:
find myDir -name "*.html" -exec cp {} ~/otherDir \;
這是有效的,因為
{}
它取代了find
找到的文件,並且每次匹配都執行一次。另請注意,這將使源目錄的副本變平。例子:
myDir/a.html myDir/b/c.html
將產生
otherdir/a.html otherdir/c.html
所以你想將
.html
某個源目錄及其子目錄中的所有文件都複製到一個目錄中(即折疊層次結構)?POSIX標準:
find myDir -name '*.html' -type f -exec sh -c 'cp "$@" "$0"' ~/otherDir {} +
請注意,它
~/otherDir
成為中間 shell 的參數 0,它允許源文件精確為"$@"
.-exec sh -c 'cp "$@" "$0"' "$target"
將目標目錄留在 shell 之外還有一個額外的好處,即如果這是父 shell 腳本 ( )中的變數,您將不會遇到引用問題。對於沒有的舊系統
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/