ottiene i primi caratteri del parametro di espansione del comando di ricerca

1

Ho un'enorme collezione di immagini e vorrei metterle in cartelle corrispondenti ai loro primi 3 charachers + estensione .jpg.

Quindi mi piacerebbe prendere 4_1_0002.png file (tutti i file che iniziano con 4_1) e metterlo nella cartella 4_1_.jpg . Allo stesso modo mi piacerebbe prendere 4_2_0002.png file (tutti i file che iniziano con 4_2) e metterlo nella cartella 4_2_.jpg .

Tutti quei file che vorrei ordinare si trovano ora in un'unica enorme cartella. Mi aspettavo di utilizzare un comando find, ma non so come estrarre i primi tre caratteri dal parametro di espansione {}.

find . -type f -ok echo mv {} "path/first3char.jpg" \;

    
posta sanjihan 01.04.2017 - 10:26
fonte

1 risposta

3

Supponendo che tutti i tuoi file si trovino nella stessa directory e che i nomi dei file siano ragionevoli, qualcosa di simile

 find . -maxdepth 1 -type f -name '*png' |
     while read line; do
         echo mv "$line" "path/${line:2:3}.jpg/"
     done

Esegui il comando prima come scritto (includendo echo ) per verificare se il risultato ha un senso. Quindi rimuovi echo e riesegui.

    
risposta data 01.04.2017 - 13:22
fonte

Leggi altre domande sui tag