Исправить файлы с ????????? разрешениями

Исправить файлы с ????????? разрешениями

Я написал скрипт для изменения прав доступа ко всем файлам в каталоге:

#!/bin/bash

files=`find "$1"`

for f in $files; do
    chown "$2" "$f"
    chmod 600 "$2"
done

Очевидно, второй аргумент chmod должен быть "$f"вместо "$2". Однако, когда я запустил скрипт (в небольшом каталоге), я также забыл включить второй аргумент, который должен был быть "dave:dave". Теперь все файлы в каталоге полностью перепутаны:

~ $ ll Documents/                                                                                                      
ls: cannot access Documents/wiki.txt: Permission denied
ls: cannot access Documents/todo.txt: Permission denied
ls: cannot access Documents/modules.txt: Permission denied
ls: cannot access Documents/packages.txt: Permission denied
total 0
-????????? ? ? ? ?            ? modules.txt
-????????? ? ? ? ?            ? packages.txt
-????????? ? ? ? ?            ? todo.txt
-????????? ? ? ? ?            ? wiki.txt

Запускается sudo chown dave:dave Documents/*и sudo chmod 600 Documents/*не выдает ошибок, но файлы остаются неизменными. Я знаю, что могу sudo catкаждый файл в новый файл, но мне интересно, как исправить разрешения на исходные файлы.

решение1

В дополнение к ответам, данным в комментариях, вы также должны отметить, что ваш скрипт прервется, если в имени файла будут содержаться пробелы.

Вы можете сделать все это в одной команде, используя find, вместо того, чтобы пытаться разобрать список имен файлов, выведенных из find. Гораздо надежнее; обрабатывает имена файлов независимо от специальных символов или пробелов.

find "$1" -type f -exec chown "$2" {} \; -exec chmod 600 {} \;

Обратите внимание, что если chownдаст сбой на данном файле, то chmodне будет запущен на этом файле. Вероятно, это то поведение, которое вам нужно в любом случае.


Поскольку вы уже выполнили ошибочную команду, которая удалила разрешения на выполнение из вашего каталога «Документы», вам необходимо вернуть разрешения на выполнение:

chmod u+x Documents

Если у других каталогов по ошибке были удалены разрешения на выполнение, вы можете исправить это с помощью:

find Documents -type d -exec chmod u+x {} \;

Однако я не думаю, что вам это понадобится, поскольку после удаления разрешений на выполнение из «Документов» ни один из его подкаталогов не станет доступным, поэтому разрешения на выполнение из них не будут удалены.

решение2

Единственный раз, когда я увидел файлы с такими странными разрешениями, это было насерьезноиспортил файловую систему. Раунд fsck(8)вернул большую часть из них к относительной нормальности, но многие все еще были сильно повреждены. Я думаю, это было из-за аппаратной проблемы (снял хорошие файлы с диска и выбросил его).

Связанный контент