GNU/Linux >> Znalost Linux >  >> Linux

Přejmenujte soubory a adresáře rekurzivně pod ubuntu /bash

Řešení využívající find :

Chcete-li přejmenovat pouze soubory :

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

Chcete-li přejmenovat pouze adresáře :

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

Chcete-li přejmenovat soubory i adresáře :

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

Pokud vám nevadí nainstalovat další nástroj, můžete použít rnm:

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

Projde všechny adresáře/podadresáře (kvůli -dp -1 ) a nahraďte speciální s pravidelným v jejich jménech.


Odpověď @speakr pro mě byla vodítkem.

Pokud používáte -execdir k transformaci souborů i adresářů, budete také chtít odstranit -type f z uvedeného příkladu. Chcete-li to napsat, použijte:

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

Zvažte také přidání g (globální) příznak k regulárnímu výrazu, pokud chcete nahradit vše výskytů special s regular v daném souboru a nejen v prvním výskytu. Například:

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

transformuje special-special.jpg na regular-regular.jpg . Bez globálního příznaku skončíte s regular-special.jpg .

Pro informaci:GNU Rename není ve výchozím nastavení na Mac OSX nainstalováno. Pokud používáte správce balíčků Homebrew, brew install rename to napraví.


Zkuste to udělat (vyžadovat bash --version>=4):

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

Odstraňte -n přepněte, když jsou vaše testy v pořádku

Existují další nástroje se stejným názvem, které to mohou nebo nemusí umět, takže buďte opatrní.

Pokud spustíte následující příkaz (GNU )

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

a máte výsledek jako

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

a neobsahující:

ELF

pak se zdá, že toto je ten správný nástroj =)

Pokud ne, nastavte jej jako výchozí (obvykle již platí) na Debian a odvozeniny jako Ubuntu :

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

(nahraďte /path/to/rename na cestu vašeho perl's rename příkaz.

Pokud tento příkaz nemáte, vyhledejte ve správci balíčků a nainstalujte jej nebo to proveďte ručně

V neposlední řadě tento nástroj původně napsal Larry Wall, otec Perlu.


Linux
  1. Najděte největší soubory a adresáře v Linuxu

  2. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  3. Bash =~ Regex A Https://regex101.com/?

  1. Najít největší soubory rekurzivně?

  2. Jak najít a odstranit prázdné adresáře a soubory v Unixu

  3. Najděte více souborů a přejmenujte je v Linuxu

  1. Jak vyhledávat a odstraňovat adresáře rekurzivně v systému Linux

  2. Najděte soubory a adresáře v Linuxu jako profík

  3. Jak mohu rekurzivně odstranit všechny prázdné soubory a adresáře v Linuxu?