GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Benennen Sie Dateien und Verzeichnisse unter ubuntu /bash rekursiv um

Eine Lösung mit find :

Um nur Dateien umzubenennen :

find /your/target/path/ -type f -exec rename 's/special/regular/' '{}' \;

Um nur Verzeichnisse umzubenennen :

find /your/target/path/ -type d -execdir rename 's/special/regular/' '{}' \+

Um sowohl Dateien als auch Verzeichnisse umzubenennen :

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

Wenn es Ihnen nichts ausmacht, ein anderes Tool zu installieren, können Sie rnm:

verwenden
rnm -rs '/special/regular/g' -dp -1 *

Es wird alle Verzeichnisse/Unterverzeichnisse durchlaufen (wegen -dp -1 ) und ersetzen Sie special mit normal in ihren Namen.


Die Antwort von @speakr war der Schlüssel für mich.

Wenn Sie -execdir verwenden, um sowohl Dateien als auch Verzeichnisse umzuwandeln, sollten Sie auch -type f entfernen aus dem gezeigten Beispiel. Um es zu buchstabieren, verwenden Sie:

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

Ziehen Sie auch in Betracht, g hinzuzufügen (globales) Flag für die Regex, wenn Sie alle ersetzen möchten Vorkommen von special mit regular in einem bestimmten Dateinamen und nicht nur beim ersten Vorkommen. Zum Beispiel:

find /your/target/path/ -execdir rename 's/special/regular/g' '{}' \+

transformiert special-special.jpg bis regular-regular.jpg . Ohne das globale Flag erhalten Sie am Ende regular-special.jpg .

FYI:GNU Rename ist nicht standardmäßig auf Mac OSX installiert. Wenn Sie den Homebrew-Paketmanager verwenden, brew install rename wird Abhilfe schaffen.


Versuchen Sie dies (benötigen Sie bash --version>=4):

shopt -s globstar
rename -n 's/special/regular/' **

Entfernen Sie den -n wechseln, wenn Ihre Tests OK sind

Es gibt andere Tools mit demselben Namen, die dies möglicherweise können oder auch nicht sei vorsichtig.

Wenn Sie den folgenden Befehl ausführen (GNU )

$ file "$(readlink -f "$(type -p rename)")"

und Sie haben ein Ergebnis wie

.../rename: Perl script, ASCII text executable

und enthält nicht:

ELF

dann scheint dies das richtige Werkzeug zu sein =)

Wenn nicht, um es zum Standard zu machen (normalerweise bereits der Fall) auf Debian und Ableitungen wie Ubuntu :

$ sudo update-alternatives --set rename /path/to/rename

(ersetzen Sie /path/to/rename zum Pfad Ihres perl's rename Befehl.

Wenn Sie diesen Befehl nicht haben, durchsuchen Sie Ihren Paketmanager, um ihn zu installieren, oder führen Sie dies manuell durch

Last but not least wurde dieses Tool ursprünglich von Larry Wall, dem Vater von Perl, geschrieben.


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Größte Dateien rekursiv finden?

  3. Erstellen und Entfernen von Dateien und Verzeichnissen unter Linux

  4. So finden und löschen Sie leere Verzeichnisse und Dateien in Linux

  5. Finden Sie mehrere Dateien und benennen Sie sie in Linux um

Find-Befehl in Linux (Dateien und Verzeichnisse suchen)

So benennen Sie Dateien und Verzeichnisse in Linux um

3 Möglichkeiten, Dateien und Verzeichnisse in Linux zu finden

So benennen Sie Dateien und Verzeichnisse in Ubuntu 20.04 um

Finden Sie Dateien und Verzeichnisse unter Linux ganz einfach

Wie kann ich alle leeren Dateien und Verzeichnisse in Linux rekursiv löschen?