Chtěl bych změnit příponu souboru z *.txt
na *.text
. Zkusil jsem použít basename
příkaz, ale mám potíže se změnou více než jednoho souboru.
Zde je můj kód:
files=`ls -1 *.txt`
for x in $files
do
mv $x "`basename $files .txt`.text"
done
Zobrazuje se mi tato chyba:
basename: too many arguments Try basename --help' for more information
Přijatá odpověď:
Přímo z Greg's Wiki:
# Rename all *.txt to *.text
for f in *.txt; do
mv -- "$f" "${f%.txt}.text"
done
*.txt
je kulový vzor pomocí *
jako zástupný znak, který odpovídá libovolnému řetězci. *.txt
odpovídá všem názvům souborů končících na „.txt“.
--
označuje konec seznamu možností. Tím se vyhnete problémům s názvy souborů začínajícími pomlčkami.
${f%.txt}
je rozšíření parametru, nahrazené hodnotou f
proměnná s .txt
odstraněno z konce.
Podívejte se také na položku, proč byste neměli analyzovat ls
.
Pokud musíte použít basename
, vaše syntaxe by byla:
for f in *.txt; do
mv -- "$f" "$(basename -- "$f" .txt).text"
done