如何複製部分但不是全部文件?

如何複製部分但不是全部文件?

因此,在目錄上下文中*使用時,您可以將 用作所有檔案的通配符。cp有沒有辦法複製除x文件之外的所有文件?

答案1

Rsync 很好地處理了這個問題。

全部複製範例:rsync -aP /folder1/* /folder/2

複製全部並排除的範例:rsync -aP --exclude=x /folder1/* /folder2/

開關-aP

  • a:類似cp -a、遞迴等。
  • P:顯示進度,rsync 的一個很好的功能。

答案2

bash你可以使用extglob

 $ shopt -s extglob  # to enable extglob
 $ cp !(b*) new_dir/

其中!(b*)排除所有b*文件。

您可以稍後extglob停用

 $ shopt -u extglob

答案3

這不是 的功能cp,而是 shell 的功能(它將 擴展*為所有非點檔案),因此答案取決於您使用的 shell。例如,zsh支援這種語法:

$ cp ^x /path/to/destination

其中表示「除」^x之外的所有文件x

您也可以組合選擇和取消選擇模式,例如要複製除包含 xyz 的文件之外的所有 wav 文件,您可以使用:

cp *.wav~*xyz*

答案4

也可以使用標準工具以多種方式在普通舊式(可移植/相容)bourne shell 中完成,但與使用高級 shell 通配符或具有內建排除選項的命令相比,其方式要差得多。

如果檔案不是太多(並且名稱不包含空格和/或換行符),這可能是一種方法:

cp `ls | egrep -v '^excludename$'` destdir/.

當然,bashGNU 工具很棒而且功能強大,但它們仍然不總是可用。如果您打算將其放入可移植腳本中,我會find像 Rush 的評論中那樣推薦。

相關內容