通过 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}
将扩展为两个单词:ab
和 ac
。也就是说,包含单词 a
的集合是 "multiplied",而包含两个单词的集合 b
和 c
.
多次使用时类似,例如{a,b}{c,d}
扩展为 4 个单词:ac
、ad
、bc
和 bd
(要测试,请尝试:echo {a,b}{c,d}
)。
在上面的cp
命令中,我们使用了一个零长度词和.copy
来(重新)产生原词和原词附加 .copy
:
$ echo filename{,.copy}
filename filename.copy
我正在尝试将不同文件夹中的文件复制到它们自己的文件夹中:
/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}
将扩展为两个单词:ab
和 ac
。也就是说,包含单词 a
的集合是 "multiplied",而包含两个单词的集合 b
和 c
.
多次使用时类似,例如{a,b}{c,d}
扩展为 4 个单词:ac
、ad
、bc
和 bd
(要测试,请尝试:echo {a,b}{c,d}
)。
在上面的cp
命令中,我们使用了一个零长度词和.copy
来(重新)产生原词和原词附加 .copy
:
$ echo filename{,.copy}
filename filename.copy