2016-04-08 7 views
-2

Ich habe Dateien wie diese Diese Liste ist ein Beispiel für meine Dateien beachten Sie die tatsächlichen Dateien sind nicht in der Reihenfolge der Reihenfolge.Linux: Wie verschiebt man Dateien mit dem gleichen Namen, diff ext. in einen eigenen Ordner?

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

und einige haben eine Erweiterung .c aber nicht alle

Wie würde ich diese Dateien in ihren eigenen Namen Ordner verschieben.

Ich habe versucht, diese

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

aber es funktioniert nicht wie beabsichtigt das heißt Nun, es die Ordner erstellt, aber wird nicht die zweite Datei von gleichen verschiedenen Erweiterungsnamen im selben Ordner.

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

Verwenden Sie den Operanden oder anstelle von und: I.e. '||'. Oder verwenden Sie den Befehl Trennzeichen: '; –

Antwort

1

sollten Sie verwenden mkdir -p, wird es nicht beschweren (und brechen die &&), wenn Verzeichnisse vorhanden sind (es wird auch übergeordnete Verzeichnisse erstellen, wenn jene nicht existieren).

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

Während dies für Dateien wie das funktionieren kann, sind meine tatsächlichen Daten nicht sequentiell dh mydata, yourdata – thomasb9511

+0

In diesem Fall, geben Sie ein Beispiel für Dateien und die Verzeichnisse, in die sie gehen sollen . Ich würde erwarten, dass die Einstellung von DIRNAME = und die 'cut' Parameter die Bits sind, die Sie ändern möchten. – Mel