Ich habe ein Verzeichnis mit Dateien, in denen einige dann mit einem Unterstrich enden.

Ich möchte jede Datei testen, um festzustellen, ob sie mit einem Unterstrich endet, und dann den Unterstrich entfernen.

Ich verwende derzeit den folgenden Code:

for file in *;do
   echo $file;
   if [[  "${file:$length:1}" == "_"   ]];then 
       mv $file  $(echo $file | sed "s/.$//g");
   fi
done

Es scheint jedoch nicht, die Dateien mit Unterstrich umzubenennen. Wenn ich zum Beispiel eine Datei mit dem Namen all_indoors_ habe, erwarte ich, dass sie mir all_indoors gibt.

-2
kartoza-geek 28 Dez. 2015 im 15:02

4 Antworten

Beste Antwort

Sie können verwenden, welche rekursiv sein wird:

while read f; do 
  mv "$f" "${f:0:-1}"; # Remove last character from $f
done < <(find . -type f -name '*_')
0
andlrc 28 Dez. 2015 im 12:07

Sie können die integrierte String-Ersetzung verwenden:

for file in *_; do
    mv "$file" "${file%_}"
done    
1
Eugene Yarmash 28 Dez. 2015 im 12:19

Verwenden Sie einfach einen regulären Ausdruck, um die Zeichenfolge zu überprüfen:

for file in *
do
   [[ $file =~ "_$" ]] && echo mv "$file" "${file%%_}"
done

Wenn Sie sicher sind, dass es wie beabsichtigt funktioniert, entfernen Sie das echo, damit der Befehl mv ausgeführt wird!


Es kann sogar sauberer sein, *_ zu verwenden, sodass for nur die Dateien mit einem Namen durchläuft, der mit _ endet, als hek2mgl schlägt in Kommentaren vor.

for file in *_
do
   echo mv "$file" "${file%%_}"
done
1
Community 23 Mai 2017 im 11:59

Obwohl dies kein reiner bash Ansatz ist, können Sie rename.ul verwenden (geschrieben von Larry Wall, der Person hinter perl). Das Umbenennen ist nicht Teil der Standard-Linux-Umgebung, sondern Teil von util-linux.

Sie verwenden Umbenennen mit:

rename perlexpr files

(einige Flags weggelassen).

Sie könnten also verwenden:

rename 's/_$//' *

Wenn Sie alle Zeichen einschließlich und nach dem Unterstrich entfernen möchten.

Wie @ hek2mgl hervorhebt, gibt es mehrere rename Befehle (siehe hier), also testen Sie zuerst, ob Sie den richtigen ausgewählt haben.

0
Willem Van Onsem 28 Dez. 2015 im 15:58