Используйте rename
как часть команд Perl.
find. -type f -name '*20170919*' -execdir
rename -n 's/20170919/20170918/' '{}' \;
Используйте execdir
, поскольку он выполняет свою часть команды для запуска файла, найденного в их относительном пути, куда возвращается execdir
. Это пойло предотвратит передачу полного пути к файлу (относительно текущего рабочего каталога )и предотвратит неправильное переименование папки с тем же шаблоном вместо самого имени файла.
Если все ваши файлы находятся в одном каталоге, ниже одной строки rename
достаточно.
rename -n 's/20170919/20170918/' *20170919*
Удалите -n
, если вы уверены, что результат переименования действительно переименован. Возможно, вам придется добавить -v
, чтобы увидеть, что переименовывается.
В конце концов, вам может понадобиться сегодняшняя дата, если вы хотите, чтобы это выполнялось каждый день для группы файлов. затем используйте команду date
, как показано ниже в$(...)
(подстановка команды )между двойными кавычками.
find. -type f -name "*$(date +"%Y%m%d")*" -execdir
rename -n "s/$(date +"%Y%m%d")/$(date -d "-1day" +"%Y%m%d")/" '{}' \;
P.s. Поскольку вы используете оболочку csh
, вам нужно использовать `...`
вместо $(...)
или лучше переключиться на новые оболочки, такие как bash
, zsh
.
find./ -type f -name "*`date +"%Y%m%d"`*" -execdir
rename -n "s/`date +"%Y%m%d"`/`date -d "-1day" +"%Y%m%d"`/" '{}' \;
В Linux это можно сделать, размонтировав этот каталог в отдельном пространстве имен монтирования с флагом распространения монтирования, установленным на private:
# truncate -s 3G blob
# mkfs.ext4 blob
...
# mkdir dir
# echo below > dir/file
# mount blob dir
# echo above > dir/file
# cat dir/file
above
# unshare --mount --fork --propagation private sh -c 'umount dir; cat dir/file'
below
# cat dir/file
above
# unshare --mount --fork --propagation private sh -c '
umount dir
for f in dir/file /dev/fd/7; do
realpath --relative-to=. "$f"; cat "$f"
done
' 7<dir/file
dir/file
below
dir/file
above
Примечание. :флаг --propagation private
используется по умолчанию, по крайней мере, в последних версияхunshare(1)
:я добавил его только для акцента.
Простой ответ :используйте работающую систему.
Если к вашему корневому разделу /home
был смонтирован другой раздел, вы действительно не можете просто размонтировать его или даже повторно -привязать монтирование. Однако живая система имеет свой собственный /home/ и не использует раздел, который обычно предоставляет вашу корневую файловую систему. Итак, в реальной системе просто смонтируйте корневую файловую систему, и оттуда вы сможете получить доступ к исходному каталогу /home.
Найти работающую систему не должно быть сложно, потому что существует довольно много дистрибутивов, которые предоставляют образ live CD, который можно записать на компакт-диск или поместить на USB-накопитель для загрузки оттуда. Некоторые из дистрибутивов, которые предлагают это, — Debian, Knoppix и MX Linux.