GNU/Linux >> Linux Esercitazione >  >> Linux

Rinomina file e directory in modo ricorsivo in ubuntu /bash

Una soluzione usando find :

Per rinominare solo file :

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

Per rinominare solo directory :

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

Per rinominare sia i file che le directory :

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

Se non ti dispiace installare un altro strumento, puoi usare rnm:

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

Passerà attraverso tutte le directory/sottodirectory (a causa di -dp -1 ) e sostituisci speciale con normale nei loro nomi.


La risposta di @speakr è stata l'indizio per me.

Se usi -execdir per trasformare sia i file che le directory, ti consigliamo di rimuovere anche -type f dall'esempio mostrato. Per precisarlo, usa:

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

Considera anche l'aggiunta di g flag (globale) alla regex se vuoi sostituire tutto occorrenze di special con regular in un dato nome file e non solo alla prima occorrenza. Ad esempio:

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

trasformerà special-special.jpg a regular-regular.jpg . Senza il flag globale, ti ritroverai con regular-special.jpg .

Cordiali saluti:GNU Rename non è installato per impostazione predefinita su Mac OSX. Se stai usando il gestore di pacchetti Homebrew, brew install rename rimedierà a questo.


Prova a farlo (richiedi bash --version>=4):

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

Rimuovi il -n cambia quando i tuoi test sono OK

Esistono altri strumenti con lo stesso nome che possono o meno essere in grado di farlo, quindi stai attento.

Se esegui il seguente comando (GNU )

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

e ottieni un risultato come

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

e non contenente:

ELF

allora questo sembra essere lo strumento giusto =)

In caso contrario, per renderlo predefinito (di solito è già così) su Debian e derivati ​​come Ubuntu :

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

(sostituisci /path/to/rename al percorso del tuo perl's rename comando.

Se non hai questo comando, cerca nel tuo gestore di pacchetti per installarlo o fallo manualmente

Ultimo ma non meno importante, questo strumento è stato originariamente scritto da Larry Wall, il padre di Perl.


Linux
  1. Trova file e directory in Linux come un professionista

  2. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  3. Bash =~ Regex e HTTPS://regex101.com/?

  4. Trova e copia i file

  5. Come posso eliminare in modo ricorsivo tutti i file e le directory vuoti in Linux?

Trova comando in Linux (Trova file e directory)

Come rinominare file e directory in Linux

3 modi per trovare file e directory in Linux

Come rinominare file e directory in Ubuntu 20.04

Trova i file e le directory più grandi in Linux

Trova facilmente file e directory su Linux