GNU/Linux >> Linux Esercitazione >  >> Linux

Come sostituire un carattere con un altro in tutti i nomi di file delle directory correnti?

Come si rinominano tutti i file/sottodirectory nella cartella corrente?

Diciamo che ho molti file e sottodirectory con spazi e voglio sostituire tutti gli spazi con un trattino basso.

File 1
File 2
File 3
Dir 1
Dir 3

dovrebbe essere rinominato in

File_1
File_2
File_3
Dir_1
Dir_3

Risposta accettata:

Se hai bisogno di rinominare anche i file nelle sottodirectory e il tuo find supporta -execdir predicato, allora puoi farlo

find /search/path -depth -name '* *' 
    -execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} ;

Grazie a @glenn jackman per aver suggerito -depth opzione per find e per farmi pensare.

Nota che su alcuni sistemi (inclusi quelli GNU/Linux), find potrebbe non riuscire a trovare file il cui nome contiene spazi e anche sequenze di byte che non formano caratteri validi (tipico con file multimediali con nomi con caratteri non ASCII codificati in un set di caratteri diverso da quello della locale). Impostazione della locale su C (come in LC_ALL=C find... ) risolverebbe il problema.


Linux
  1. Come trovare tutti i file relativi a un software?

  2. Come trovare tutti i file/cartelle con l'autorizzazione 777 in Linux?

  3. Come elencare in modo ricorsivo tutti i file e le directory

  4. Come trovare le directory più grandi o i file più grandi?

  5. Come sostituire tutti i contenuti di una cartella con un'altra

Come trovare file in Linux con il comando Trova

Come trovare file con il comando fd in Linux

Come copiare un file da un'altra directory a quella corrente?

Come sostituire tutte le occorrenze di una parola in tutti i file nella riga di comando di Linux

Come trovare file con dozzine di criteri con il comando Trova Bash

Come scoprire le directory o i file che consumano più spazio?