我有一个文件夹,其中包含相同名称但文件扩展名不同的文件。例如:
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中是否有任何方法(任何编程语言都可以)我可以将文件组移动到新文件夹(每个文件组的新文件夹或一个文件夹中的所有文件夹),如果他们的文件名,减去扩展名,匹配?
答案 0 :(得分:3)
认为你想要这样的东西。
#!/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。
$ 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
答案 1 :(得分:1)
有很多方法可以做到这一点。一种解决方案是简单地使用move命令:
mv file-1.* /new/directory
这将移动名为file-1
的所有文件,无论新目录的扩展名如何。
答案 2 :(得分:1)
考虑这个脚本:
for i in *.*; do
d="${i%.*}"
[[ ! -d "$d" ]] && mkdir "$d"
cp "$i" "$d"
done