Вы должны переименовать, в то время как существуют подобные инструменты, которые могли служить Вам также:
touch x1 x2 x10 x11 x101
ls ; rename 's/x/x0/' x[0-9]
x1 x10 x101 x11 x2
ls ; rename 's/x/x0/' x[0-9][0-9]
x01 x02 x10 x101 x11
ls
x001 x002 x010 x011 x101
'переименуйте' часть некоторого пакета жемчуга, если необходимо установить его, по крайней мере, доступный для Linux.
Без переименовывают, существует аналогичное решение с циклом:
rm *
touch x1 x2 x10 x11 x101
for f in x[0-9] ; do mv $f ${f/x/x0}; done
for f in x[0-9][0-9] ; do mv $f ${f/x/x0}; done ; ls
x001 x002 x010 x011 x101
Tar не перезаписывал существующий файл только для чтения, он удалил его и затем создал новый файл с тем же именем. Это - последствие пути-x работы; это заменяет существующие версии файла дизайном для размещения старого метода инкрементного резервного копирования добавления файлов в существующий архив. Архив tar мог бы иметь несколько версий файла в нем; только последний появится на диске после того, как извлечение будет завершено. Побочный эффект этого состоит в том, что tar также удаляет существующие копии файлов, даже если они появляются только однажды в архиве.
То, что файл не может быть удален, не зависит от полномочий файла, устанавливаемых на только для чтения, но на полномочиях родительского каталога.
Когда у Вас есть доступ для записи к каталогу, можно удалить файлы только для чтения в том каталоге, даже если Вы не владеете теми файлами сами (ссылка).
# file removal test
(
mkdir -p test
echo hello > test/file.txt
chmod -w test
chmod -w test/file.txt
sudo chown root:wheel test/file.txt
#sudo chflags uchg test/file.txt
ls -ld test test/file.txt
rm -fv test/file.txt
echo
chmod 700 test # set write permission
ls -ld test test/file.txt
rm -fv test/file.txt
)
Если Вы удаляете доступ для записи к test
каталог в Вашем примере выше, gnutar
(на Mac OS X), не может удалить test/1.txt
и жалуется:
# gnutar: ./test/1.txt: Cannot open: File exists
# gnutar: Exiting with failure status due to previous errors
# After
tartest() {
dirperms="$1"
mkdir -p test
[[ -f test/1.txt ]] && chmod +w test/1.txt
echo "Before" > test/1.txt
gnutar -czf ./test.tgz ./test
echo "After" > test/1.txt
chmod -w test/1.txt
chmod "${dirperms}" test
gnutar -xzf ./test.tgz
cat test/1.txt
return 0
}
tartest 755
tartest 555