Jak usunąć końcowe białe znaki z rozszerzeń plików i śniegów folderów?

0

Jak mogę usunąć końcowe spacje z rozszerzeń plików i folderów w śnieżnej lampartie?

Idealnie byłbym w stanie uruchomić jedno polecenie w katalogu, które szukałoby i usuwało wszystkie pliki i foldery z końcowymi spacjami i ich podfolderami.

Nie mogłem tego zrobić z automatyzatorem.

To delikatna operacja, z którą nie chcę popełniać błędów.

Pomoc bardzo ceniona.

timoto
źródło

Odpowiedzi:

1
#!/bin/bash

IFS=$'\n'
find ~/Desktop -mindepth 1 -depth | while read f; do
    new="$(dirname "$f")/$(basename "$f" | sed 's/ *$//')"
    [[ "$f" != "$new" ]] && mv "$f" "$new"
done
  • Bez IFS=$'\n'tego fodczytane zmienne | while read fnie miałyby spacji wiodących ani końcowych
  • Zmiana sed 's/ *$//'na sed 's/^ *//;s/ *$//usuwa również spacje od początku
Lri
źródło
Dziękuję za zwrotną informację. Teraz, kiedy o tym wspominasz, z pewnością chciałbym również usunąć wiodące białe znaki. Jestem trochę zdezorientowany, jak skrypt wyglądałby w takim przypadku. Czy oznacza to usunięcie $'\n'i | while readosiągnięcie tego?
timoto
's/^ *//;s/ *$//'usuwałby również spacje na początku. Miałem na myśli to, że bez IFS=$'\n'żadnej z odczytanych zmiennych f while read fnie byłoby spacji końcowych ani wiodących.
Lri
Jeśli wprowadzę oryginał w jednym wierszu w terminalu, dostaję: błąd składni w pobliżu nieoczekiwanego tokena `do ', a jeśli uruchomię go w skrypcie, nie otrzymam polecenia.
timoto
@timoto Czy w wersji jednowierszowej brakowało średnika po IFS=$'\n'lub czymś? Błąd „Nie znaleziono polecenia” może być spowodowany próbą uruchomienia skryptu, script.shzamiast tego, ./script.shjeśli nie znajdował się on na twojej ścieżce.
Lri
Tak, uruchamiam skrypt, ponieważ sudo ./script.shpróbowałem tego również na cl. IFS=$'\n'; for d in {1..9}; do find ~/test -name '* ' -depth $d | while read f; do mv "$f" "$(sed 's/ *$//' <<< "$f")" done doneNie wystąpił błąd, ale po prostu zawiesił się i nie powrócił do monitu.
timoto