Попробуйте удалить условие and
, удалите следующий код из вашей строки:
&& NR>=%-1
Определенно есть более простой способ сделать это надежно в zsh. Есть и более простой способ сделать это надежно в обычном sh :этот скрипт слишком сложен и ненадежен (предполагает, что все имена файлов имеют расширение, перезаписывает файлы без запроса, … ). Поскольку эта ветка посвящена zsh, я воспользуюсь возможностями zsh.
Модификаторы расширения истории и параметров r
и e
полезны для разделения имени файла между базовым именем и расширением. Однако имейте в виду, что они работают только тогда, когда файл имеет расширение .
Предупреждение :Непроверенный код.
function cpx {
if (($# != 2)); then
cat >&2 <<EOF
Usage: cpx FILENAME N
Make N copies of FILENAME.
EOF
return 1
fi
local n=$2
if [[ $n != <-> ]]; then
print -ru2 "cpx: $n: not a number"
return 1
fi
local prefix=$1 suffix= i
# If there is an extension, put the number before the extension
if [[ $prefix:t == ?*.* ]]; then
prefix=$1:r
suffix=.$1:e
fi
# If the part before the number ends with a digit, separate the additional
# number with a dash.
if [[ $prefix == *[0-9] ]]; then
prefix+="-"
fi
# Copy foo.bar to foo1.bar, foo2.bar,...
for ((i=1; i<=n; i++)); do
cp -p -i -- $1 $prefix$i$suffix
done
}