Linux

如何有選擇地將文件從一個目錄複製到另一個目錄?

  • April 5, 2017

在 Linux 上,我如何選擇性地將大多數(但不是全部)文件從目錄 ( dir1) 複製到另一個目錄 ( dir2)?

我不想將文件複製*.c到.*.txt``dir2

cp線上手冊頁無法幫助我。

除了 eboix 的find命令(因為它在空白處中斷,我將在最後放置一兩個更安全的方法),您可以使用bash’ 的extglob功能:

# turn extglob on
shopt -s extglob 
# move everything but the files matching the pattern
mv dir1/!(*.c) -t dir2
# If you want to exclude more patterns, add a pipe between them:
mv dir1/!(*.c|*.txt) -t dir2

請參閱bash手冊頁了解更多關於 extglob 的功能。請注意,這不是遞歸的,因此只會dir1直接移動文件,而不是子目錄。該find方法是遞歸的。


更安全的find命令:

find dir1 ! -name '*.c' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' -exec mv -t dir2 {} +

如需更多模式,只需添加更多! -name語句:

find dir1 ! -name '*.c' ! -name '*.txt' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' ! -name '*.txt' -exec mv -t dir2 {} +

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