Мне нужно перечислить или показать или запросить файлы в папке (ну, технически, на USB-диске, но я могу перейти к нему в Finder / Terminal), которые помечены только для чтения.
Все Google-фу в мире просто раскрывает решения по изменению разрешений, но мне это не нужно
Моя видеорегистратор помечает видео / изображения только для чтения, чтобы сохранить их, когда я нажимаю на кнопку, но они все еще находятся в папке с несколькими сотнями файлов MOV, и мне нужен простой способ отфильтровать те, которые я ищу.
источник
touch test_file; sudo chown root:staff test_file;
(первый метод не в состоянии перечислить файл, хотя это файл только для чтения для пользователя)find
один, посмотри unix.stackexchange.com/questions/22421/... и оригинальный вопрос, связанный оттуда. В случае с OP это, вероятно, не проблема.Одним из способов является использование
-w
опция в bash, чтобы проверить, доступен ли файл для записи или нет.Перейдите в каталог, в котором вы хотите проверить свои файлы, затем введите:
for RO in $(find . -type f);do [ -r "$RO" ] && [ ! -w "$RO" ] && echo $RO;done
(кредит www.unix.com )
[РЕДАКТИРОВАТЬ]
Чтобы разобраться с пробелами в именах файлов, лучше использовать
find -exec
путь, а не зацикливаться наfind
:или же
источник
find
обычно разбивается на имена файлов, содержащие пробелы и тому подобное. Может не быть проблемой в контексте ОП, но может ударить вас в других обстоятельствах.find -exec
find . -type f -exec [ -r {} -a \! -w {} ] \; -print
гораздо легче читать, чемfind ... | xargs ... sh -c
чудовище в моем собственном ответе :-)Перечислите файлы и grep для шаблона только для чтения:
ls -l | grep '^-r--'
^
Символ обозначает начало строки.Здесь мы фильтруем только файлы, упоминая
^-
после этого ищем только файлы разрешения на чтение, указавr--
, Если вы хотите фильтровать чтение & amp; исполняемые файлы разрешений, вы можете использоватьr-x
,Если вы хотите просто имя файла, вы можете использовать команду ниже
ls -l | grep '^-r--' | awk 'NF>1{print $NF}'
Печать имени файла с использованием вышеуказанной команды работает, только если у вас нет пробелов в имени файла.
источник
ls -l
это умный способ сделать это, но учтите, что ваши файлы могут начинаться с-rw-r--r--
сroot
как владелец, и такие файлы не будут перечислены, даже если они не доступны для записи пользователюgrep ... | awk
обычно не требуется, вторая команда может быть переписана какls -l | awk '/^-r--/ {print $NF}'