如何使用 Unix/Linux 命令行复制它?

如何使用 Unix/Linux 命令行复制它?

我有一个这样的文件夹结构:

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

相关内容