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 Justmv*/new/directory/
?如果你想用文件名制作目录,请看我的答案。如果是这样,你会像mv example-1.*/new/dir
@hellocatefood那样做,如果它们“匹配”什么?您发布的示例中有不同的文件名。@Hello,我在回答中修改了示例,使其与您的文件完全相同。如果输出不是您想要做的,那么您真的需要重新回答这个问题。谢谢!这正是我想要的。谢谢!这正是我想要的。