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.