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