GNU/Linux >> Znalost Linux >  >> Linux

Jak přejmenovat všechny soubory se speciálními znaky a mezerami v adresáři?

-n příznak je pro

--no-act

Žádná akce:zobrazí soubory, které by byly přejmenovány.

Je tedy normální, pokud nemáte žádné změny.

Pokud jde o váš příkaz, funguje to pro mě:

$ touch "a @ test"
$ ls
a @ test
$ rename -n 's/ |\$|@/_/g' *
a @ test renamed as a___test

Možná v závislosti na vašem shellu budete muset uniknout z |

$ rename -n 's/ \|\$\|@/_/g' *

Nebo můžete použít […] zápis skupinových znaků:

$ rename -n 's/[ @\$]/_/g' *

Můžete to zkusit takto:

for file in ./*Block*                                       
do echo mv "$file" "${file//[ ()@$]/_}"
done

Pokud jste s výsledkem spokojeni, odstraňte echo před mv skutečně přejmenovat soubory.


hledám hezký skript pro odstranění speciálních znaků i německých speciálních znaků, jejich nahrazením univerzálními, aby se neodstranily užitečné informace Aktualizoval jsem poslední verzi skriptu, která měla drobné problémy, které vedly k:

#!/bin/bash

for file in ./*
do
  infile=`echo "${file:2}"|sed  \
         -e 's|"\"|"\\"|g' \
         -e 's| |\ |g' -e 's|!|\!|g' \
         -e 's|@|\@|g' -e 's|*|\*|g' \
         -e 's|&|\&|g' -e 's|]|\]|g' \
         -e 's|}|\}|g' -e 's|"|\"|g' \
         -e 's|,|\,|g' -e 's|?|\?|g' \
         -e 's|=|\=|g'  `
  outfileNOSPECIALS=`echo "${file:2}"|sed -e 's|[^A-Za-z0-9._-]|_|g'`
  outfileNOoe=`echo $outfileNOSPECIALS| sed -e 's|ö|oe|g'`
  outfileNOae=`echo $outfileNOoe| sed -e 's|ä|ae|g'`
  outfileNOue=`echo $outfileNOae| sed -e 's|ü|ue|g'`
  outfileNOOE=`echo $outfileNOue| sed -e 's|Ö|OE|g'`
  outfileNOAE=`echo $outfileNOOE| sed -e 's|Ä|AE|g'`
  outfileNOUE=`echo $outfileNOAE| sed -e 's|Ü|UE|g'`
  outfileNOss=`echo $outfileNOUE| sed -e 's|ß|ss|g'`
  outfile=${outfileNOss}
  if [ "$infile" != "${outfile}" ]
  then
        echo "filename changed for " $infile " in " $outfile
        mv "$infile" ${outfile}
  fi
done

exit

výsledkem je:

@don_crissti:Dělá hokus-pokus s infile, protože linux by měl vlastní problémy se speciálními znaky při přesunu názvu souboru.


Linux
  1. Jak změnit vlastnictví souborů a adresářů pomocí příkazu chown

  2. Jak najít všechny soubory s velikostí souboru nula (0) bajtů v adresáři rekurzivně

  3. Najít soubory a rozbalit je (s mezerami)

  1. Jak přesunout (a přepsat) všechny soubory z jednoho adresáře do druhého?

  2. Jak přejmenuji soubory s mezerami pomocí prostředí Linux?

  3. Jak hromadně přejmenovat soubory s neplatným kódováním nebo hromadně nahradit neplatné kódované znaky?

  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Mohu přejmenovat soubory v adresáři pomocí Vim?

  3. Jak tarovat soubory se seřazeným pořadím?