Linux - Sostituzione di spazi nei nomi dei file
Domanda
Ho un numero di file in una cartella e voglio sostituire ogni carattere di spazio in tutti i nomi di file con caratteri di sottolineatura. Come posso raggiungere questo obiettivo?
Soluzione
Questo dovrebbe farlo:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Altri suggerimenti
Preferisco usare il comando 'rinomina', che accetta regex in stile Perl:
rename "s/ /_/g" *
Puoi eseguire una corsa a secco con il flag -n:
rename -n "s/ /_/g" *
Usa sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Se vuoi provarlo prima di premere il grilletto, cambia mv
in echo mv
.
Cosa succede se si desidera applicare l'attività di sostituzione in modo ricorsivo ? Come lo faresti?
Beh, ho appena trovato la risposta da solo. Nessuna soluzione più elegante (cerca di rinominare anche i file che non soddisfano la condizione) ma funziona. (A proposito, nel mio caso avevo bisogno di rinominare i file con '% 20', non con un carattere di sottolineatura)
#!/bin/bash
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /%20}; done
fi
)
done
Se usi bash:
for file in *; do mv "$file" ${file// /_}; done
Cita le tue variabili:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Rimuovi " echo " per fare il vero nome.
Prova qualcosa del genere, supponendo che tutti i tuoi file fossero .txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
Il modo più semplice per sostituire una stringa (spazio nel tuo caso) con un'altra stringa in Linux
sta usando sed
. Puoi farlo come segue
sed -i 's/\s/_/g' *
Spero che questo aiuti.
Ecco un'altra soluzione:
ls | awk '{printf("\"%s\"\n", <*>)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
- usa awk per aggiungere virgolette attorno al nome del file
- usa sed per sostituire lo spazio con caratteri di sottolineatura; stampa il nome originale tra virgolette (da awk); quindi il nome sostituito
- xargs prende 2 righe alla volta e le passa a mv
Credo che la tua risposta sia in Sostituisci gli spazi nei nomi dei file con caratteri di sottolineatura .
Per rinominare tutti i file con estensione .py
,
trova . -iname " *. py " -tipo f | xargs -I% rinomina " s / / _ / g " & Quot;% "
Output di esempio,
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py