通过shell复制相应文件夹中不同文件夹中的文件

时间:2017-11-20 15:34:47

标签: linux bash find cp

我正在尝试将不同文件夹中的文件复制到自己的文件夹中:

/Test/Folder1/File1
/Test/Folder2/File2
/Test/Folder3/File3

我想在其自己的文件夹中创建每个文件的副本:

/Test/Folder1/File1.Copy
/Test/Folder2/File2.Copy
/Test/Folder3/File3.Copy

我会尝试使用

find /SapBackup/server*/SAPDBBAK/*_COM.dump -mmin 360 -type f -execdir cp . {} 

但我不知道如何使用找到的文件的文件名和文件夹作为操作数。

我想使用单行将其添加到crontab,因此for-solution不适合(AFAIK)

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您通过-execdir操作走在正确的轨道上。

请注意,您可以多次使用{} ,例如:

find /some/path -mmin 360 -type f -execdir cp {} {}.copy \;

甚至更简单,将其与bash中的brace expansion 1 结合使用:

find /some/path -mmin 360 -type f -execdir cp {}{,.copy} \;

1 the docs中所述,支撑扩展是shell expansion,可以通过它生成任意字符串。实际上,您可能会认为它是bash中的Cartesian product

例如:a{b,c}将扩展为两个字:abac。即,包含单词a的集合与包含两个单词bc的集合“相乘”。

类似地,当多次使用时,例如, {a,b}{c,d}扩展为4个字:acadbcbd(测试,尝试:echo {a,b}{c,d})。

在上面的cp命令中,我们使用零长度字.copy来(重新)生成原始字和原始字{{1}附加:

.copy

答案 1 :(得分:0)

如果将这些行放在bash脚本上,可以从crontab中调用它。

for i in $(ls /path/to/folder); do cp $i $i.copy; done

这是一个简单的代码,你可以很容易地改变它。

我希望这很有用。

答案 2 :(得分:0)

要复制目录,必须将-r标志添加到cp命令。关于oneliner的内容如下:

find /SapBackup/server*/SAPDBBAK/*_COM.dump -mmin 360 | xargs -I {} cp -r {} {}.copy