Můžeme použít mv
příkaz pro změnu názvu souboru. Můžeme jej také použít ke změně přípony souboru. Funguje však pouze s jedním souborem a nepoužívá zástupné znaky.
Můžeme vytvořit shell skript pro změnu přípony více souborů najednou.
Linux Shell Script pro změnu rozšíření více souborů
Podívejme se na kód skriptu, kde použijeme příkaz mv ve smyčce for ke změně přípony všech souborů v aktuálním adresáři.
#!/bin/sh
#Save the file as multimove.sh
IFS=$'\n'
if [ -z "$1" ] || [ -z "$2" ]
then
echo "Usage: multimove oldExtension newExtension"
exit -1
fi
# Loop through all the files in the current directory
# having oldExtension and change it to newExtension
for oldFile in $(ls -1 *.${1})
do
# get the filename by stripping off the oldExtension
filename=`basename "${oldFile}" .${1}`
# determine the new filename by adding the newExtension
# to the filename
newFile="${filename}.${2}"
# tell the user what is happening
echo "Changing Extension \"$oldFile\" --> \"$newFile\" ."
mv "$oldFile" "$newFile"
done
Využití :multimove.sh doc txt
(pro změnu všech .doc na .txt)
Testování skriptu Rename Shell
Níže je ukázkový výstup z výše uvedeného spuštění programu.
$ ls
abc.txt hi.doc journaldev.doc multimove.sh
$ ./multimove.sh doc txt
Changing Extension "hi.doc" --> "hi.txt" .
Changing Extension "journaldev.doc" --> "journaldev.txt" .
$ ls
abc.txt hi.txt journaldev.txt multimove.sh
$ ./multimove.sh txt doc
Changing Extension "abc.txt" --> "abc.doc" .
Changing Extension "hi.txt" --> "hi.doc" .
Changing Extension "journaldev.txt" --> "journaldev.doc" .
$ ls
abc.doc hi.doc journaldev.doc multimove.sh
$
Předpoklady a omezení skriptů
- Soubory mají pouze jednu tečku (.)
- Prochází všechny soubory pouze v aktuálním adresáři. Můžete jej však rozšířit, aby vyhledával soubory také v podřízených adresářích.
- Bílé mezery v názvu souboru mohou způsobit problém se skriptem. V mém systému to fungovalo s názvy souborů s mezerami, ale nemohu zaručit, že to bude fungovat i vám.
Další četby: Linux mv příkaz