linux - with - unix cp指令




Unix/Linux中特定文件的遞歸副本? (5)

rsync對於本地文件複製以及計算機之間很有用。 這將做你想要的:

rsync -avm --include='*.jar' -f 'hide,! */' . /destination_dir

整個目錄結構來自。 複製到/ destination_dir,但只複製.jar文件。 -a確保文件的所有權限和時間不變。 -m將省略空目錄。 -v用於詳細輸出。

對於乾運行添加一個-n,它會告訴你它會做什麼但不會實際複製任何東西。

我需要從目錄及其所有子目錄中復制所有*.jar文件。 我怎麼能在UNIX / Linux終端上做到這一點? 命令cp -r *.jar /destination_dir不起作用。


如果你的find有一個-exec開關,那麼cp和-t選項:

find . -name "*.jar" -exec cp -t /destination_dir {} +

如果您發現沒有為並行調用提供“+”,則可以使用“;” 但是你可以省略-t

find . -name "*.jar" -exec cp {} /destination_dir ";"

如果要在目標下維護相同的目錄層次結構,可以使用

(cd SOURCE && find . -type f -name \*.jar -exec tar cf - {} +) \
  | (cd DESTINATION && tar xf -)

這種方式,而不是在後面滴答中擴展find的輸出,具有能夠處理任意數量的文件的優點。


cp --parents `find -name \*.jar` destination/

來自man cp

--parents
       use full source file name under DIRECTORY

tar -cf - `find . -name "*.jar" -print` | ( cd /destination_dir && tar xBf - )




cp