![将文件复制到其他位置](https://linux22.com/image/62110/%E5%B0%86%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0%E5%85%B6%E4%BB%96%E4%BD%8D%E7%BD%AE.png)
我有多个目录,名称如下:
15mar20a_00021sq_v01_00019en.frames
15mar20a_00021sq_v01_00020en.frames
and so on...
每个包含 7 个扩展名为 .raw 的文件。目录之一中的文件示例如下:
IntermediateImage_20150320_180411_n0.raw
IntermediateImage_20150320_180411_n1.raw
IntermediateImage_20150320_180411_n2.raw
...until n7.raw
我希望脚本转到每个目录并将文件复制.raw
到其父目录之外的新目录,以便我可以.raw
在整个练习结束时将所有文件放在同一位置。
任何帮助将非常感激。
答案1
假设这些*frames
目录都在同一个目录中,您可以执行类似的操作
cd to/the/parent/of/the/frames/dirs
mkdir all-my-raws
cp *.frames/*.raw all-my-raws/
为了避免文件重复,您可以替换cp
为ln
,仅创建指向相同数据的新链接。
答案2
您可以用于find
此用途。
find /path/to/directories -type f -name "*.raw" -exec cp {} /new/path \;
如果您想移动文件而不是复制它们,请替换cp
为mv
移动文件后,您可以使用以下命令删除空目录find /path/to/directories -type d -empty -exec rmdir {} \;
答案3
我建议的解决方案:
收集 bash 数组中所有目录的列表。像
dirs=($(ls *.frames))
这样,您将在数组中拥有所有目录名称。使用类似的方法对整个范围运行循环
for i in ${$dirs[@]}; do......
在循环中,在某处创建一个新目录,并将所有文件从当前目录移动到该位置。就像是
for i in ${$dirs[@]}; do mkdir dir_$i mv ($i)/*.raw dir_$i/ done
这可能需要一些小的调整,但很确定这会起作用。
PS - 尝试更好的方法来创建新目录:P