因此,在目錄上下文中*
使用時,您可以將 用作所有檔案的通配符。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/.
當然,bash
GNU 工具很棒而且功能強大,但它們仍然不總是可用。如果您打算將其放入可移植腳本中,我會find
像 Rush 的評論中那樣推薦。