Mam kilka plików w folderze i chcę zastąpić każdy znak spacji we wszystkich nazwach plików podkreśleniami. Jak mogę to osiągnąć?
Mam kilka plików w folderze i chcę zastąpić każdy znak spacji we wszystkich nazwach plików podkreśleniami. Jak mogę to osiągnąć?
Odpowiedzi:
To powinno wystarczyć:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*na PATH_TO_YOUR_DIRECTORY.
Wolę używać polecenia „rename”, które przyjmuje wyrażenia regularne w stylu Perla:
rename "s/ /_/g" *
Możesz wykonać próbny bieg z flagą -n:
rename -n "s/ /_/g" *
rename " " "_" *
renameniedostępne w OSX.
renamejest dostępny.
Użyj sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Jeśli chcesz to wypróbować przed naciśnięciem spustu, po prostu zmień mvna echo mv.
Jeśli używasz basha:
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 ', aby uzyskać więcej informacji.
mv --help' for more information. mv: missing file argument Try mv --help ', aby uzyskać więcej informacji. mv: missing file argument Spróbuj mv --help' for more information. mv: missing file argument Try mv --help ', aby uzyskać więcej informacji.
A co jeśli chcesz zastosować zadanie zamiany rekurencyjnie ? Jak byś to zrobił?
Cóż, właśnie znalazłem odpowiedź. Nie jest to najbardziej eleganckie rozwiązanie (próbuje również zmienić nazwy plików, które nie spełniają warunku), ale działa. (BTW, w moim przypadku musiałem zmienić nazwy plików na „% 20”, a nie na podkreślenie)
#!/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
Spróbuj czegoś takiego, zakładając, że wszystkie twoje pliki to .txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try mv --help ', aby uzyskać więcej informacji.
Oto inne rozwiązanie:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
Cytuj swoje zmienne:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Usuń „echo”, aby dokonać faktycznej zmiany nazwy.
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat \ '1130_1_bedroom_floor_plan.jpg \' ': Brak takiego pliku lub katalogu mv: nie można stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat \' 1130_diningroom_table.jpg \ '': Brak takiego pliku lub katalogu
Najłatwiejszym sposobem zastąpienia ciągu (w twoim przypadku znaku spacji) innym Linuxjest użycie sed. Możesz to zrobić w następujący sposób
sed -i 's/\s/_/g' *
Mam nadzieję że to pomoże.
Wydaje mi się, że odpowiedź brzmi: Zastąp spacje w nazwach plików podkreśleniami .
Aby zmienić nazwy wszystkich plików z użyciem .pyrozszerzenia,
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
Przykładowe wyjście,
$ 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.jpga mój folder już1.jpgw niej był.