2013-12-16 69 views
0

我有一個文件夾充滿了具有相同名稱但文件擴展名不同的文件。例如:如果文件名減去擴展名匹配,則將一組文件移動到新文件夾中?

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的任何方式(任何編程語言都行)我可以在組文件移動到一個新的文件夾(每個文件組的新文件夾或全部在一個文件夾),如果他們文件名稱,減去擴展名,匹配?

回答

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 

例如,

$ 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 
+0

謝謝!這大多是我想要的。 – hellocatfood

1

有很多方法可以做到。一個解決辦法是簡單地使用移動命令:

mv file-1.* /new/directory

這無論擴展的移動名爲file-1所有文件到新的目錄。

+0

我已經擴展了這個問題,以表明這些文件可能具有不同的名稱而不是「file-」。你能否提供一種不管文件命名結構如何的方法? – hellocatfood

+1

@hellocatfood只是'mv */new/directory /'?雖然看到我的答案,如果你想使文件名與dirs。 – BroSlow

+0

如果是這種情況,你會像'mv example-1。*/new/dir'一樣執行相同的操作。 –

1

考慮這個腳本:

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