Как получить доступ к содержимому каталога, когда на него смонтирован другой?

Используйте 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"`/" '{}' \;
0
16.01.2020, 17:35
2 ответа

В 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):я добавил его только для акцента.

0
28.01.2020, 02:54

Простой ответ :используйте работающую систему.

Если к вашему корневому разделу /homeбыл смонтирован другой раздел, вы действительно не можете просто размонтировать его или даже повторно -привязать монтирование. Однако живая система имеет свой собственный /home/ и не использует раздел, который обычно предоставляет вашу корневую файловую систему. Итак, в реальной системе просто смонтируйте корневую файловую систему, и оттуда вы сможете получить доступ к исходному каталогу /home.

Найти работающую систему не должно быть сложно, потому что существует довольно много дистрибутивов, которые предоставляют образ live CD, который можно записать на компакт-диск или поместить на USB-накопитель для загрузки оттуда. Некоторые из дистрибутивов, которые предлагают это, — Debian, Knoppix и MX Linux.

0
28.01.2020, 02:54

Теги

Похожие вопросы