2

Я должен найти команду, в которой перечислены все файлы, созданные в сентябре и доступные для чтения владельцу. Также объясните, как работает команда.

Я знаю, что должен использовать

ls -l

и я буду использовать | где-то в этом, но не уверен, что до трубы, а что после.

3 ответа3

1

Для диапазона дат вы можете использовать трюк. Сначала создайте два фиктивных файла с помощью touch:

touch -t 201209010000 /tmp/1sept
touch -t 201209302359 /tmp/30sept

Как вы можете проверить, у них есть желаемые даты создания:

$ ls -l 1sept 30sept 
-rw-rw-r-- 1 topr topr 0 Sep  1 00:00 1sept
-rw-rw-r-- 1 topr topr 0 Sep 30  2012 30sept

Теперь вы готовы перейти с последней командой:

find /thepath/you/like -type f -newer /tmp/1sept -and ! -newer /tmp/30sept -exec stat -c '%A %n' {} \; | grep '^.r'

Немного пояснений:

  • -type f поиск только по файлам
  • -новее ! -и-новее использование фиктивных файлов в качестве диапазона дат набора шаблонов, который вам нравится
  • -exec запускает команду для каждого найденного файла, записанного как {} \;
  • Команда stat выводит информацию о файле,% A означает читаемую человеком строку прав доступа, например -rw-rw-r--, а% n выводит имя файла
  • grep '^ .r' фильтрует результаты с регулярным исключением, показывая только строки, начинающиеся с <anycharacter> r, поэтому проверяет, предоставлен ли доступ для чтения владельцем файла
0

ls -lh должен перечислять файлы в удобочитаемом длинном формате (в зависимости от вашей оболочки).

Теперь вы хотите использовать grep (это программа фильтрации) для тех, которые соответствуют тому, что вы ищете.

Например, чтобы найти все файлы с надписью david, сделанные в 2011 году, я мог бы использовать:

ls -lh | grep "david" | grep "2011"

(Да, есть более быстрые и простые способы сделать это, но идея заключается в том, чтобы быть проще для спрашивающего).

В вашем случае вы хотите отфильтровать как этот первый блок текста для установленного читаемого бита, так и дату в сентябре. Посмотрите на вывод команды ls -lh и вы сможете создать свою собственную команду grep, которая работает.

-1

Попробуй это. Надеюсь, это поможет:

ls -la | grep -e "Sep"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .