Bash 如果一组文件的文件名(减去扩展名)匹配,是否将其移动到新文件夹?

Bash 如果一组文件的文件名(减去扩展名)匹配,是否将其移动到新文件夹?,bash,recursion,match,grouping,filenames,Bash,Recursion,Match,Grouping,Filenames,我有一个文件夹,里面装满了同名但文件扩展名不同的文件。例如: 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中是否有任何方法(任何编程语言都可以)如果文件名减去扩展名匹配,我可以将文件组移动到一个新文件夹(每个文件组一个新文件夹或全部在一个文件夹中)?有许多方法可以做到这一点。一种解决方案是简单地使用mo

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

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中是否有任何方法(任何编程语言都可以)如果文件名减去扩展名匹配,我可以将文件组移动到一个新文件夹(每个文件组一个新文件夹或全部在一个文件夹中)?

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

mv文件-1.*/new/目录


这将把名为
file-1
的所有文件移动到新目录,而不考虑扩展名

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

mv文件-1.*/new/目录

这将把名为
file-1
的所有文件移动到新目录,而不考虑扩展名

考虑一下这个脚本:

for i in *.*; do
   d="${i%.*}"
   [[ ! -d "$d" ]] && mkdir "$d"
   cp "$i" "$d"
done
考虑以下脚本:

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

我想你想要这样的东西

#!/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
e、 g


我想你想要这样的东西

#!/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
e、 g


我扩展了这个问题,指出这些文件可能有不同的名称,而不是“file-”。您能否提供一种不考虑文件命名结构的方法?@hellocatefood Just
mv*/new/directory/
?如果你想用文件名制作目录,请看我的答案。如果是这样,你会像
mv example-1.*/new/dir
@hellocatefood那样做,如果它们“匹配”什么?您发布的示例中有不同的文件名。@Hello,我在回答中修改了示例,使其与您的文件完全相同。如果输出不是你想要做的,那么你真的需要重新回答这个问题。我已经扩展了这个问题,指出文件可能有不同的名称,而不是“file-”。您能否提供一种不考虑文件命名结构的方法?@hellocatefood Just
mv*/new/directory/
?如果你想用文件名制作目录,请看我的答案。如果是这样,你会像
mv example-1.*/new/dir
@hellocatefood那样做,如果它们“匹配”什么?您发布的示例中有不同的文件名。@Hello,我在回答中修改了示例,使其与您的文件完全相同。如果输出不是您想要做的,那么您真的需要重新回答这个问题。谢谢!这正是我想要的。谢谢!这正是我想要的。