Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zmiana znaków w nazwach filderów i plików
#1
0
Cześć Wszystkim!

Postanowiłem zrobił poprawę w plikach i zmienić znak biały spacja " " na "_".
Skorzystałem z kodu na StackOverFlow

a dokładnie tego:
Kod:
find . -name "* *" -type d | rename 's/ /_/g'    # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'
Gdzie pierwsza część zmienia dane dla Directory 'd'
A druga dla File 'f'

Efektem jest tego, że zmieniły mi się nazwy z np "folder 123" na "folder_123"
Tak samo z plikami, z "plik test.txt" na "plik_test.txt"

Super! Oto mi chodziło.

Problem zaczął się wtedy jak chciałem zmienić nazwy FOLDERÓW z kropkami "." na "_"
Czyli chciałem uzyskać z "folder.123" na "folder_123"

Tak więc lekkomyślnie przebudowałem kod na:
Kod:
find . -name "*.*" -type d | rename 's/./_/g'

Dzięki czemu w efekcie uzyskałem nazwy folderów z "folder.123" na "__________"
Proszę o każcie mi pokazywać screenów jak to wygląda Smile

Dzięki tej akcji mam pytania:
1. Czego nie wiem - kropka ma jakieś super moce w zmienianiu nazw? jest czymś na kształt "*"?
2. Jakby wyglądał kod żebym mógł dokonać pożądanej zmiany?

Dzięki z góry za odpowiedź. Smile
Odpowiedz
#2
0
Polecenie find drukuje ścieżkę pliku co powoduje problem. Parametr -exec basename {} ';' ograniczy wydruk tylko do nazwy.
W poleceniu find dla katalogów parametr ! \( -path . \) spowoduje że nie będzie pokazywany katalogu główny ..
W poleceniu rename kropka musi być zmodyfikowana odwrotnym ukośnikiem \. żeby utraciła swoje specjalne znaczenie.


Kod:
find -name "*.*" -type d ! \( -path . \) -exec basename {} ';' | rename 's/\./_/g'

Kod:
find -name "*.*" -type f -exec basename {} ';' | rename 's/\./_/g'
Odpowiedz


Skocz do:




Użytkownicy przeglądający ten wątek: 1 gości