GNU/Linux >> Linux Esercitazione >  >> Linux

Come sostituire gli spazi nei nomi dei file usando uno script bash

puoi usare detox di Doug Harple

detox -r <folder>

Usa rename (ovvero prename ) che è uno script Perl che potrebbe essere già sul tuo sistema. Fallo in due passaggi:

find . -name "* *" -type d | rename 's/ /_/g'    # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'

Basato su Jürgen answer e in grado di gestire più livelli di file e directory in un unico limite utilizzando la versione "Revision 1.5 1998/12/18 16:16:31 rmb1" di /usr/bin/rename (uno script Perl):

find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;

Uso:

for f in *\ *; do mv "$f" "${f// /_}"; done

Sebbene non sia ricorsivo, è abbastanza veloce e semplice. Sono sicuro che qualcuno qui potrebbe aggiornarlo in modo che sia ricorsivo.

Il ${f// /_} part utilizza il meccanismo di espansione dei parametri di bash per sostituire un modello all'interno di un parametro con la stringa fornita. La sintassi pertinente è ${parameter/pattern/string} . Vedi:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html o http://wiki.bash-hackers.org/syntax/pe .


find . -depth -name '* *' \
| while IFS= read -r f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _)" ; done

all'inizio non sono riuscito a farlo bene, perché non pensavo alle directory.


Linux
  1. Come eseguire il debug di uno script Bash?

  2. Come controllare la sottostringa in Shell Script Bash?

  3. Come rinominare un file in Linux?

  4. Come faccio a conoscere il nome del file di script in uno script Bash?

  5. Linux - Sostituzione degli spazi nei nomi dei file

Come leggere un file riga per riga in Bash

Come visualizzare le finestre di dialogo della GUI nello script bash usando Zenity

35 Esempi di script Bash

Come modificare automaticamente lo sfondo di GNOME a intervalli utilizzando BASH

Come eseguire uno script Bash

Come grep per unicode � in uno script bash