2016-04-08 17 views
-2

Böyle bir dosyam var Bu liste, dosyamın bir örneğidir ve gerçek dosyaların başarılı olmadığına dikkat edin.Linux: Dosyaları aynı ada sahip nasıl taşır, diff ext. kendi klasörlerine mi?

file1.a 
file2.a 
file1.b 
file2.b 
... 

bazılarında ise .c uzantısı ama yok hepsi

Ben kendi adında klasöre bu dosyaları taşımak istiyorum nasıl.

Bu

find . -type f -print0 | xargs -0 -l sh -c 'mkdir "${1%.*}" && mv "$1" "${1%.*}"' sh 

denedi ama yani amaçlandığı gibi o Eh o klasörleri oluşturur ama alışkanlık aynı klasörde aynı adı farklı uzantısının ikinci dosyayı koymak çalışmaz.

mkdir: cannot create directory ‘./file1’: File exists 
mkdir: cannot create directory ‘./file2’: File exists 
mkdir: cannot create directory ‘./file3’: File exists 
+0

Aşağıdakileri yerine getirin ve işleneni kullanın: I.e. '||'. Ya da komut ayırıcıyı kullanın: ';' –

cevap

1

Sen mkdir -p kullanmalısınız, bu şikayet olmaz (ve && kırmak) dizinleri varsa (o yokmuşçasına o da üst dizinleri yaratacaktır).

1
 
for FILE in $(ls file[0-9].[a-z]) 
do 
    DIRNAME=$(echo $FILE |cut -c1-5) 
    [ -d $DIRNAME ] || mkdir $DIRNAME 
    mv ${FILE}* $DIRNAME 
done 

This will give you: 
$ ls file1 file2 
file1: 
file1.a file1.b file1.c 

file2: 
file2.a file2.b file2.c 
+0

Gerçek verilerim sıralı değil gibi dosyalar için çalışabilirken, yani mydata, yourdata – thomasb9511

+0

Bu durumda, bir dosya örneği ve bunların içine girmesini istediğiniz dizinleri verin. . DIRNAME = ve 'cut' parametrelerinin ayarlarının değiştirmek isteyeceğiniz bitler olacağını umuyorum. – Mel

İlgili konular