【问题标题】:Move a group of files to a new folder if their file names, minus extension, matches?如果一组文件的文件名减去扩展名匹配,则将其移动到新文件夹?
【发布时间】:2013-12-16 19:18:30
【问题描述】:

我有一个文件夹,里面装满了同名但文件扩展名不同的文件。例如:

file-1.ai
file-1.svg
file-1.pdf
file-2.ai
file-2.svg
file-2.txt
file-3.ai
file-3.svg
example-1.pdf
example-3.mov

在 Linux 中有什么方法(任何编程语言都可以)我可以将文件组移动到一个新文件夹(每个文件组一个新文件夹或一个文件夹中的所有文件),如果它们的文件名减去扩展名匹配?

【问题讨论】:

    标签: bash recursion match grouping filenames


    【解决方案1】:

    认为你想要这样的东西。

    #!/bin/bash
    
    dir="/somedir/"
    for i in "$dir"*; do
      if [ -f "$i" ]; then
        filename="${i%%.*}"
        if [ ! -d "$filename" ]; then
          mkdir "$filename"
        fi
    
        mv "$i" "$filename"
      fi
    
    done
    

    例如

    $ tree /somedir
    /somedir
    ├── example-1.pdf
    ├── example-3.mov
    ├── file-1.ai
    ├── file-1.pdf
    ├── file-1.svg
    ├── file-2.ai
    ├── file-2.svg
    ├── file-2.txt
    ├── file-3.ai
    └── file-3.svg
    
    $ ./above_script
    
    $ tree /somedir
    /somedir
    ├── example-1
    │   └── example-1.pdf
    ├── example-3
    │   └── example-3.mov
    ├── file-1
    │   ├── file-1.ai
    │   ├── file-1.pdf
    │   └── file-1.svg
    ├── file-2
    │   ├── file-2.ai
    │   ├── file-2.svg
    │   └── file-2.txt
    └── file-3
        ├── file-3.ai
        └── file-3.svg 
    

    【讨论】:

    • 谢谢!这主要是我想要的。
    【解决方案2】:

    考虑这个脚本:

    for i in *.*; do
       d="${i%.*}"
       [[ ! -d "$d" ]] && mkdir "$d"
       cp "$i" "$d"
    done
    

    【讨论】:

      【解决方案3】:

      有很多方法可以做到这一点。一种解决方案是简单地使用移动命令:

      mv file-1.* /new/directory

      这会将所有名为 file-1 的文件移动到新目录,而不管扩展名如何。

      【讨论】:

      • 我已经扩展了问题以表明文件可能具有不同的名称而不是“file-”。您能否提供一种不受文件命名结构影响的方法?
      • @hellocatfood 只是mv * /new/directory/ ?如果您想使用文件名制作目录,请参阅我的回答。
      • 如果是这种情况,你会像mv example-1.* /new/dir一样做同样的事情
      • @hellocatfood 如果他们“匹配”什么?您发布的示例中有不同的文件名。
      • @hellocatfood 我修改了答案中的示例,使其具有与您的完全相同的文件。如果输出不是您想要做的,那么您真的需要重新提出问题。
      猜你喜欢
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多