Ho un numero di file in una cartella e desidero sostituire ogni carattere di spazio in tutti i nomi di file con trattini bassi. Come posso raggiungere questo obiettivo?
Ho un numero di file in una cartella e desidero sostituire ogni carattere di spazio in tutti i nomi di file con trattini bassi. Come posso raggiungere questo obiettivo?
Risposte:
Questo dovrebbe farlo:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*
a PATH_TO_YOUR_DIRECTORY
.
Preferisco usare il comando 'rinomina', che accetta regex in stile Perl:
rename "s/ /_/g" *
Puoi fare un dry run con la bandiera -n:
rename -n "s/ /_/g" *
rename " " "_" *
rename
non disponibile in OSX appare.
rename
è disponibile.
Usa sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Se vuoi provarlo prima di premere il grilletto, mv
passa a echo mv
.
Se usi bash:
for file in *; do mv "$file" ${file// /_}; done
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try
mv --help 'per maggiori informazioni.
mv --help' for more information. mv: missing file argument Try
mv --help 'per maggiori informazioni. mv: argomento del file mancante Prova mv --help' for more information. mv: missing file argument Try
mv --help 'per maggiori informazioni.
Cosa succede se si desidera applicare l'attività di sostituzione in modo ricorsivo ? Come lo faresti?
Beh, ho appena trovato la risposta da solo. Non è la soluzione più elegante, (cerca anche di rinominare i file che non rispettano la condizione) ma funziona. (A proposito, nel mio caso avevo bisogno di rinominare i file con "% 20", non con un trattino basso)
#!/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
Prova qualcosa di simile, supponendo che tutti i tuoi file fossero .txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try
mv --help 'per maggiori informazioni.
Ecco un'altra soluzione:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
Cita le tue variabili:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Rimuovere l '"eco" per eseguire la ridenominazione effettiva.
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat
\ '1130_1_bedroom_floor_plan.jpg \' ': Nessun file o directory di questo tipo mv: can't stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat
\' 1130_diningroom_table.jpg \ '': Nessun file o directory di questo tipo
Il modo più semplice per sostituire una stringa (carattere 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 ti aiuti.
Credo che la tua risposta sia in Sostituisci gli spazi nei nomi di file con trattini bassi .
Per rinominare tutti i file con .py
un'estensione utilizzare,
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
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
1 - foo.jpg
e la mia cartella era già1.jpg
presente.