w przypadku, gdy pomaga, oto jak to zrobić z zsh:
for f in ./**/*.old; do
mv "${f}" "${f%.old}"
done
${x%pattern}
konstrukt w zsh usuwa najkrótszą wystąpienie pattern
u koniec $x
.Tutaj jest wydobywane jako funkcję:
function chgext() {
local srcext=".old"
local dstext=""
local dir="."
[[ "$#" -ge 1 ]] && srcext="$1"
[[ "$#" -gt 2 ]] && dstext="$2" dir="$3" || dir="${2:-.}"
local bname=''
for f in "${dir}"/**/*"${srcext}"; do
bname="${f%${srcext}}"
echo "${bname}{${srcext} → ${dstext}}"
mv "${f}" "${bname}${dstext}"
done
}
Zastosowanie:
chgext
chgext src
chgext src dir
chgext src dst dir
Where `src` is the extension to find (default: ".old")
`dst` is the extension to replace with (default: "")
`dir` is the directory to act on (default: ".")
To prawda w odniesieniu do 'util-linux-ng' wersji' rename', ale wersja skryptowa Perla może zrobić 'rename 's/.txt $ //' * .txt' –
dla mnie zmienić nazwę 's/.txt $ // "* .txt nie zadziałało – rp101
brakuje ci bieżącego". " jeśli chodzi o lokalizację, w której chcesz uruchomić. może to jest mój wariant wyszukiwania osx, lub moja ścieżka nie jest poprawnie ustawiona – bgs