通过 shell 将文件复制到各自文件夹中的不同文件夹中

Copy files in different folders in ther respective folder via shell

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

/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)

感谢您的帮助

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

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

这是一个简单的代码,您可以轻松更改它。

希望对你有用。

为了复制目录,您必须在 cp 命令中添加 -r 标志。像下面这样的 oneliner 怎么样:

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

您的 -execdir 行动是正确的。

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

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

或更简单,将其与 brace expansion1 组合在 bash:

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

1 大括号扩展,如 bash 中的 the docs, is a shell expansion by which arbitrary strings may be generated. In fact, you might consider it to be a Cartesian product 中所述。

例如:a{b,c} 将扩展为两个单词:abac。也就是说,包含单词 a 的集合是 "multiplied",而包含两个单词的集合 bc.

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

在上面的cp命令中,我们使用了一个零长度词.copy来(重新)产生原词和原词附加 .copy

$ echo filename{,.copy}
filename filename.copy