Rekurencyjnie kopiuj i zmieniaj nazwy, aby zastąpić spacje znakiem podkreślenia

0

Mam katalog z 400 podkatalogami, z których każdy zawiera kilkaset plików, wiele z nazwami plików zawierających spacje. Muszę skopiować wszystkie pliki ze spacjami w nazwach plików, uzyskując dwie kopie tych plików, jedną ze spacjami i jedną ze znakami podkreślenia zastępującymi spacje. Widzę dużo kodu, który się zbliża, ale nic, co kopiuje, zmienia nazwę i zastępuje spacje rekurencyjnie. Jakieś sugestie ??? Dzięki .... RW Linux zmienia nazwę używając parametrów i spacji? Zmienić nazwę systemu Linux za pomocą parametrów i spacji?

użytkownik2693196
źródło

Odpowiedzi:

1

A jednak nie jest to zbyt trudne:

 for i in "$(find . -type f -name '* *' -print)"; do cp "$i" $(echo $i | sed 's/ /_/g'); done

Zakłada się, że nazwy katalogów nie zawierają spacji. Jeśli tak, zadziała następujący skrypt bash:

  #!/bin/bash

 TGT=/path/to/targt/directory
 LIST="$(find $TGT -type f -name '* *' -print)"
 for i in $LIST; do 
      dirpath=${i%/*}
      base=base=${i##*/}
      newbase=$(echo "base" | sed 's/ /_/g')
      cp "$i" $dirpath/$newbase
 done

Jeśli w nazwach katalogów znajdują się spacje, a chcesz, aby były one dedykowane, będziesz musiał lepiej określić, co chcesz powielić: oryginalne pliki i nowe, tylko nowe, możliwe inne pliki bez spacji ...

MariusMatutiae
źródło
Dzięki .... Nazwy katalogów nie zawierają spacji.
user2693196,
@ user2693196, jeśli działa, powinieneś zaakceptować moją odpowiedź, aby użytkownicy z podobnymi problemami szukający rozwiązania mogli ją znaleźć i zachęcić do korzystania z niej. To daje szybszą odpowiedź i uniemożliwia przesłanie nowego bezużytecznego postu.
MariusMatutiae