我正在尝试将不同文件夹中的文件复制到自己的文件夹中:
/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)
感谢您的帮助
答案 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}
将扩展为两个字:ab
和ac
。即,包含单词a
的集合与包含两个单词b
和c
的集合“相乘”。
类似地,当多次使用时,例如, {a,b}{c,d}
扩展为4个字:ac
,ad
,bc
和bd
(测试,尝试: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