Если скрипт должен быть запущен в каталоге, в котором он должен работать, вам нужно сначала cd
туда. Что-то вроде этого:
find -type d -exec sh -c 'cd -- "$1"; exec /path/to/script.sh' sh {} \;
(изменить путь к скрипту, очевидно.)
В качестве альтернативы вы можете изменить сценарий так, чтобы он принимал имя каталога в качестве аргумента, это должно быть так же просто, как добавить cd
в начало сценария.
#!/bin/bash
if [ "$1" ]; then
cd -- "$1" || exit 1
fi
for file in *.*
...
Проверка, если $1
сначала пусто, чтобы поведение по умолчанию по-прежнему работало в текущем каталоге (и чтобы случайно не вызвать cd
без аргументов :это пошло бы на пользователя$HOME
).
А затем просто запустите прямой find -exec
с именем каталога в качестве аргумента скрипта:
find -type d -exec /path/to/script.sh {} \;
Хотя это было бы здорово и уменьшило бы нагрузку на уже поврежденный диск, бесплатные инструменты в Linux не очень хорошо справляются с поврежденной файловой системой NTFS. Единственная практическая вещь, которую вы можете сделать, это скопировать весь раздел (или даже весь жесткий -диск )на новый, а затем использовать инструменты Windows для его проверки. Я рекомендую ddrescue:
ddrescue /dev/damaged /dev/new logfile
Если файловая система -повреждена и не может быть использована, вы можете попытаться извлечь отдельные файлы с диска с помощью testdisk, photorec или других инструментов очистки. Имейте в виду, хотя :результаты часто разочаровывают.