Osx

如何將所有 HTML 文件從目錄樹複製到單個目錄

  • July 31, 2019

我想將所有.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

跳過使用xargswithfind-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/

引用自:https://unix.stackexchange.com/questions/12966