将文件复制到其他位置

将文件复制到其他位置

我有多个目录,名称如下:

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/

为了避免文件重复,您可以替换cpln,仅创建指向相同数据的新链接。

答案2

您可以用于find此用途。

find /path/to/directories -type f -name "*.raw" -exec cp {} /new/path \;

如果您想移动文件而不是复制它们,请替换cpmv 移动文件后,您可以使用以下命令删除空目录find /path/to/directories -type d -empty -exec rmdir {} \;

答案3

我建议的解决方案:

  1. 收集 bash 数组中所有目录的列表。像 dirs=($(ls *.frames)) 这样,您将在数组中拥有所有目录名称。

  2. 使用类似的方法对整个范围运行循环 for i in ${$dirs[@]}; do......

  3. 在循环中,在某处创建一个新目录,并将所有文件从当前目录移动到该位置。就像是

    for i in ${$dirs[@]}; do
        mkdir dir_$i
        mv ($i)/*.raw dir_$i/
    done
    

这可能需要一些小的调整,但很确定这会起作用。

PS - 尝试更好的方法来创建新目录:P

相关内容