Linux查找名称相似的文件并移至新目录

时间:2013-05-09 20:09:12

标签: linux bash shell

假设我有一个无组织的目录,其中有数千个文件,其名称中包含前缀,如abc-tab,abc-vib,h12-123,h12-498 ....如何将具有相同前缀的文件移动到其中自己的目录?

我正在考虑使用像

这样的东西
find . -path '*/support/*abc*' -exec mv "{}" /new/abc\;

但这意味着我必须为每个前缀重新键入命令。

4 个答案:

答案 0 :(得分:4)

使用lsuniq获取所有前缀以获取单个列表,然后使用for循环移动文件。

for F in $(ls | cut -d- -f1 | uniq); do
    mkdir "${F}" && mv "${F}"-* "${F}"
done

许多人从Advanced Bash Scripting Guide学习shell脚本。有关这些程序的详细信息,请查看cutuniq手册页。

答案 1 :(得分:1)

我会使用for循环来操作每个文件名的每个实例。

在包含文件的目录中:

    mkdir newfolder

    for i in prefix_*
    do
       cp $i newfolder/$i
    done

然后我会检查是否复制了正确的文件,如果是,则运行

    rm prefix_*

更危险的方法是运行

    mkdir newfolder

    for i in prefix_*
    do
       mv $i newfolder/$i
    done

但是mv会自动删除源文件,我希望确保在此之前发生正确的操作。

答案 2 :(得分:0)

如果命令基本上按照你的意愿执行,你可以简单地用它包围一个脚本:

for i in abc h12 something_else
do 
  find . -path \*/support/\*${i}\* -exec mv "{}" /new/${i} +
done

答案 3 :(得分:0)

像这样的脚本应该适合你:

while read l
do
   prefix=${l%-*}
   mv "$l" "/new/$prefix"
done < <(find '*/support/')