我有一个这样的文件夹结构:
MAT11NA_09_XX_XX_XXX
MAT11NA_09_XX_XX_XXXL
MAT11NA_11_XX_XX_XXX
MAT11NA_11_XX_XX_XXXL
MAT11NA_10_XX_XX_XXX
MAT11NA_10_XX_XX_XXXL
我想从这台服务器复制到另一台服务器MAT11NA_09_XX_XX_XXX
,但不能MAT11NA_09_XX_XX_XXX
大号。当我完成这个时,我想复制MAT11NA_09_XX_XX_XXX
大号但不是MAT11NA_09_XX_XX_XXX
。这部分MAT11NA_09_
不会改变,大号最后也沒有改變。
其余文件夹也一样......
如何在 Unix/Linux 命令行中执行此操作?
谢谢。
答案1
带有“L”
cp -r *L destination
没有“L”
cp -r *[^L] desyination
答案2
我知道这很愚蠢,但至少这很直截了当。
这将复制所有以 L 结尾的文件/目录:
cp `ls | grep -E 'L$'` DEST
这将复制所有文件/目录不是以 L 结尾:
cp `ls | grep -vE 'L$'` DEST
将 DEST 替换为您的目的地。
答案3
对于那些你确实想要 L 的,只需执行以下操作:
scp -r MAT*L destserver:/whatever/
做那些该做的事不是有了 L,你想用 bash 扩展 Glob:
shopt -s extglob
scp -r ./!(MAT*L) destever:/whatever/
我还没有用 scp 测试过,但这大致是一种方法。您也可以考虑使用 find 命令(对于没有 L 的用户)。
find . ! -iname 'MAT*L' ! -iname '.*' -print0 | xargs -0 tar zcf foo.tar.gz
然后只需复制 tar 文件。
答案4
好的,我都尝试过了。
“ scp -r MAT*L destserver:/whatever/
” — 这个看上去正在起作用。
shopt extglob
scp -r ./!(MAT*L) destever:/whatever/
对于这个,我运行了命令“ shopt extglob
”,然后进行了复制。但我得到了这个错误“ -bash: !: event not found
”...所以,它不起作用。
我也尝试了第一个答案......文件夹结构有点像这样:
folder1
MAT11NA_09_XX_XX_XXX
MAT11NA_09_XX_XX_XXXL
MAT11NA_11_XX_XX_XXX
MAT11NA_11_XX_XX_XXXL
MAT11NA_10_XX_XX_XXX
MAT11NA_10_XX_XX_XXXL
我想取出MAT11NA_09_XX_XX_XXX
文件夹并放入另一台服务器上的文件夹中。
然后我想取出MAT11NA_09_XX_XX_XXXL
文件夹并放入另一台服务器上的另一个文件夹中。
然后...我想取出MAT11NA_11_XX_XX_XXX
文件夹并将其放入MAT11NA_09_XX_XX_XXX
另一台服务器上的文件夹(与我放置的文件夹不同)。
同样对于MAT11NA_11_XX_XX_XXXL
...
我不想将所有 L 文件夹放入另一台服务器的一个文件夹中,也不想将所有非 L 文件夹放入另一台服务器的另一个文件夹中。
希望你这次能理解,抱歉。谢谢。
更新
好的,在最后一个答案之后,我正在使用这些,并且看来它们正在发挥作用:
scp -r MAT11NA_09_*L contentuser@/destination
scp -r MAT11NA_09_*[^L] contentuser@/destination