GNU/Linux >> Znalost Linux >  >> Linux

Jak nahradit mezery v názvech souborů pomocí bash skriptu

můžete použít detox od Douga Harplea

detox -r <folder>

Použijte rename (také znám jako prename ), což je skript v Perlu, který již může být ve vašem systému. Udělejte to ve dvou krocích:

find . -name "* *" -type d | rename 's/ /_/g'    # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'

Na základě Jürgenových odpověď a schopnost zpracovat více vrstev souborů a adresářů v jedné vazbě pomocí verze /usr/bin/rename "Revision 1.5 1998/12/18 16:16:31 rmb1" (perlovský skript):

find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;

Používám:

for f in *\ *; do mv "$f" "${f// /_}"; done

I když to není rekurzivní, je to docela rychlé a jednoduché. Jsem si jistý, že by to někdo mohl aktualizovat, aby byl rekurzivní.

${f// /_} část využívá bashův mechanismus rozšíření parametrů k nahrazení vzoru v parametru dodaným řetězcem. Relevantní syntaxe je ${parameter/pattern/string} . Viz:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html nebo http://wiki.bash-hackers.org/syntax/pe.


find . -depth -name '* *' \
| while IFS= read -r f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _)" ; done

napoprvé se mi to nepodařilo správně, protože mě nenapadly adresáře.


Linux
  1. Jak ladit Bash skript?

  2. Jak zkontrolovat podřetězec v Shell Script Bash?

  3. Jak přejmenovat soubor v Linuxu?

  1. Jak poznám název souboru skriptu ve skriptu Bash?

  2. Jak zvýraznit Bash skripty ve Vimu?

  3. Jak číst předposlední řádek v souboru pomocí Bash?

  1. Jak zajistit, aby příkaz alias fungoval ve skriptu bash nebo souboru bashrc

  2. Používáte podtržítko v názvech souborů?

  3. Jak grep pro unicode � ve skriptu bash