GNU/Linux >> Znalost Linux >  >> Linux

Jak nahradit jeden znak druhým ve všech názvech souborů aktuálních adresářů?

Jak přejmenujete všechny soubory/podadresáře v aktuální složce?

Řekněme, že mám mnoho souborů a podadresářů s mezerami a chci všechny mezery nahradit podtržítkem.

File 1
File 2
File 3
Dir 1
Dir 3

by měl být přejmenován na

File_1
File_2
File_3
Dir_1
Dir_3

Přijatá odpověď:

Pokud potřebujete přejmenovat soubory i v podadresářích, a find podporuje -execdir predikát, pak můžete udělat

find /search/path -depth -name '* *' 
    -execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} ;

Děkujeme @glenn jackman za návrh -depth možnost find a přimět mě přemýšlet.

Všimněte si, že na některých systémech (včetně systémů GNU/Linux) find nemusí selhat najít soubory, jejichž název obsahuje mezery a také sekvence bajtů, které netvoří platné znaky (typické u mediálních souborů s názvy s jinými znaky než ASCII kódovanými ve znakové sadě odlišné od národního prostředí). Nastavení národního prostředí na C (jako v LC_ALL=C find... ) by problém vyřešil.


Linux
  1. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  2. Jak najít všechny soubory/složky s oprávněním 777 v Linuxu?

  3. Jak rekurzivně vypsat všechny soubory a adresáře

  1. Jak najít všechny soubory končící na .rb s Linuxem?

  2. Jak najít největší adresáře nebo největší soubory?

  3. Jak nahradit veškerý obsah z jedné složky jinou

  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Jak přesunout všechny soubory (včetně skrytých) z jednoho adresáře do druhého?

  3. Jak najdu všechny soubory a adresáře, do kterých lze zapisovat konkrétním uživatelem?