Найдите все перезаписываемые файлы в текущем каталоге

Я хочу быстро определить все перезаписываемые файлы в каталоге. Что быстрый путь состоит в том, чтобы сделать это?

25
задан vehomzzz 22 March 2010 в 12:01
поделиться

8 ответов

find -type f -maxdepth 1 -writable
34
ответ дан 28 November 2019 в 18:25
поделиться

Если вы используете оболочку,

find .  -maxdepth 1 -type f -writable

см. Man find

Вы найдете лучшие ответы на этот тип вопросов на superuser.com или serverfault.com

Если вы пишете код, а не просто используете оболочку вас может заинтересовать системный вызов access (2).

Этот вопрос уже задавался на serverfault

РЕДАКТИРОВАТЬ: @ ghostdog74 спрашивал, удалили ли вы права на запись для этого файла, если он все еще найдет файл. Ответ: нет, это только находит файлы, которые доступны для записи.

dwaters@eirene ~/temp
$ cd temp

dwaters@eirene ~/temp/temp
$ ls

dwaters@eirene ~/temp/temp
$ touch newfile

dwaters@eirene ~/temp/temp
$ ls -alph
total 0
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../
-rw-r--r--  1 dwaters Domain Users 0 Mar 22 13:27 newfile

dwaters@eirene ~/temp/temp
$ find .  -maxdepth 1 -type f -writable
./newfile

dwaters@eirene ~/temp/temp
$ chmod 000 newfile

dwaters@eirene ~/temp/temp
$ ls -alph
total 0
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../
----------  1 dwaters Domain Users 0 Mar 22 13:27 newfile

dwaters@eirene ~/temp/temp
$ find .  -maxdepth 1 -type f -writable

dwaters@eirene ~/temp/temp
3
ответ дан 28 November 2019 в 18:25
поделиться
for  var in `ls`
do
if [ -f $var -a -w $var ]
then
echo "$var having write permission";
else
echo "$var not having write permission";
fi
done
0
ответ дан 28 November 2019 в 18:25
поделиться
stat -c "%A->%n" *| sed -n '/^.*w.*/p'
0
ответ дан 28 November 2019 в 18:25
поделиться

-f проверяет наличие файла

-w проверяет, доступен ли он для записи

Пример:

$ for f in *; do [ -f $f ] && [ -w $f ] && echo $f; done
3
ответ дан 28 November 2019 в 18:25
поделиться

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

ls -l | awk '$1 ~ /^.*w.*/'

$1 - это первое поле, (т.е. блок разрешений ls -l), регулярное выражение просто говорит найти букву "w" в первом поле. вот и все.

если вы хотите найти владельца напишите разрешение

ls -l | awk '$1 ~ /^..w/'

если вы хотите найти группу напишите разрешение

ls -l | awk '$1 ~ /^.....w/'

если вы хотите найти других напишите разрешение

ls -l | awk '$1 ~ /w.$/'
4
ответ дан 28 November 2019 в 18:25
поделиться

Проблема с find -writable в том, что он не переносимый и его нелегко правильно эмулировать с помощью переносимых операторов find. Если в вашей версии find этого нет, вы можете использовать touch для проверки возможности записи в файл, используя -r, чтобы убедиться, что вы (почти) не изменяете файл:

find . -type f | while read f; do touch -r "$f" "$f" && echo "File $f is writable"; done

Опция -r для touch есть в POSIX, поэтому ее можно считать переносимой. Конечно, это будет гораздо менее эффективно, чем find -writable.

Обратите внимание, что touch -r будет обновлять ctime (время последнего изменения мета-данных) каждого файла, но в любом случае ctime редко кого волнует.

1
ответ дан 28 November 2019 в 18:25
поделиться

Параметр -writable найдет файлы, которые доступны для записи текущему пользователю. Если вы хотите найти файлы, которые доступны для записи кем-либо (или даже в других комбинациях), вы можете использовать параметр -perm :

find -maxdepth 1 -type f -perm /222

Это позволит найти файлы, которые доступны для записи их владельцем (кем бы может быть):

find -maxdepth 1 -type f -perm /200

Для управления значением аргумента режима можно использовать различные символы:

  • / - любой бит разрешения
  • - - все биты ( -222 ] будет означать все - пользователь, группа и другие)
  • без префикса - точная спецификация ( 222 будет означать отсутствие разрешений, кроме записи)
16
ответ дан 28 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

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