GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Rinominare un file con il nome della directory principale nel terminale?

Ho a che fare con un gran numero di file annidati all'interno di directory (un file per directory), simile a questo:

fred/result.txt
john/result.txt
mary/result.txt
...

Attualmente sto usando il seguente comando per elaborare ciascuno di questi file:

find . -maxdepth 1 -type d ( ! -name . ) -exec bash -c "cd '{}' && processResult result.txt" ;

Sto cercando qualcosa che posso aggiungere alla fine di questo comando che cambierà i nomi dei file in fred.txt , ecc. e successivamente sposta il file nella directory principale per eliminare il livello aggiuntivo di directory.

Quale sarebbe il modo migliore per farlo?

Risposta accettata:

Possiamo usare l'approccio classico:find con while read combinato:

Demo:

$ ls *
fred:
results.txt

jane:
results.txt

john:
results.txt

$> find . -type f -name "results.txt" -printf "/%Pn" | while read FILE ; do DIR=$(dirname "$FILE" );                            
>  mv ."$FILE" ."$DIR""$DIR".txt;done                                                                                             
$> ls
fred/  jane/  john/
$> ls *
fred:
fred.txt

jane:
jane.txt

john:
john.txt

Usa echo prima di usare mv per testare la linea con i tuoi file.

Piccolo miglioramento

Possiamo incorporare la chiamata a bash in exec , con espansione dei parametri (in particolare rimozione del prefisso). Fondamentalmente sta incorporando uno script in una chiamata exec.

$> find "$PWD" -type f -name "results.txt" -exec bash -c ' DIR=$( dirname "{}"  ); echo "{}" "$DIR"/"${DIR##*/}".txt  ' ;                
/home/xieerqi/TESTDIR/fred/results.txt /home/xieerqi/TESTDIR/fred/fred.txt
/home/xieerqi/TESTDIR/jane/results.txt /home/xieerqi/TESTDIR/jane/jane.txt
/home/xieerqi/TESTDIR/john/results.txt /home/xieerqi/TESTDIR/john/john.txt

Per rendere il comando generale, (funziona per qualsiasi file, non solo per results.txt ) rimuovi semplicemente -name "results.txt" parte. Vedi anche questo post per una soluzione Python alternativa a questo.


Ubuntu
  1. Comando per visualizzare le informazioni sul file multimediale nel terminale?

  2. Come rinominare un file in Linux?

  3. Script della shell di Linux per aggiungere zeri iniziali ai nomi dei file

  4. wget:nome del file scaricato

  5. Scrivere su file .txt?

Rinominare un file nel terminale Linux

Come installare Ranger Terminal File Manager su Linux

Come creare un file in Linux usando Terminal

Come rinominare i file in Ubuntu 20.04

Cercapersone terminali

File Linux mv con nome lungo