bash - 從所有子目錄複製具有特定擴展名的所有文件




linux cp (3)

在unix下,我想將所有具有特定擴展名的文件(所有excel文件)從所有子目錄複製到另一個目錄。 我有以下命令:

cp --parents `find -name \*.xls*` /target_directory/

此命令的問題是:

  • 它也複製了目錄結構,我只想要文件(因此所有文件最終都應該放在/ target_directory /中)

  • 它不會復製文件名中包含空格的文件(這些文件很多)

針對這些問題的解決方案?


--parents正在復制目錄結構,所以你應該擺脫它。

你寫這個的方式, find執行,輸出放在命令行上,這樣cp就無法區分分隔文件名的空格和文件名中的空格。 做一些像這樣的事情會更好

$ find . -name \*.xls -exec cp {} newDir \;

其中為find每個文件名執行cp ,並正確傳遞文件名。 以下是有關此技術的更多信息

而不是以上所有,您可以使用zsh並簡單地鍵入

$ cp **/*.xls target_directory

zsh可以擴展通配符以包含子目錄,並使這類事情變得非常簡單。


我有類似的問題。 我解決了它:

find dir_name '*.mp3' -exec cp -vuni '{}' "../dest_dir" ";"

'{}'";" 在每個文件上執行複制。


綜上所述,我想出了這個版本。 這個版本也適用於mac恢復終端。

find ./ -name '*.xsl' -exec cp -prv '{}' '/path/to/targetDir/' ';'

它將在當前目錄中以遞歸方式查找具有xsl擴展名的文件的所有子目錄。 它會將它們全部複製到目標目錄。

cp標誌是:

  • p - 保留文件的屬性
  • r - 遞歸
  • v - 詳細(顯示你被複製了)






cp