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.