Какая команда выводит список файлов, созданных за определенный месяц и доступных для чтения владельцу?

2

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

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

ls -l

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

tinlyx
источник
3
Вы должны посмотреть в findкоманду. Кроме того, не пытайтесь анализировать ls- см. Mywiki.wooledge.org/ParsingLs .
Цеземер
2
Я думаю, что это не противоречит правилам - просить людей StackExchange сделать вашу домашнюю работу за вас. Но если вы не сделаете это сами, как вы собираетесь учиться?
Исаак Рабинович
1
Во-первых, имейте в виду, что когда вы имеете дело с метками времени в файлах, то, что вы обычно имеете дело с «временем модификации». Есть два других времени: «изменить время» и «время доступа». Они также известны соответственно как mtime, ctime и atime. В файловых системах Unix нет времени «создания» (или, по крайней мере, ни на одной из тех, что я видел)
Кэмерон Керр,
Страница «info» для команды «touch» полезна для объяснения «времени изменения»: «Время изменения inode представляет время, когда метаинформация файла изменилась в последний раз. Один из распространенных примеров этого - изменение прав доступа к файлу. «. Есть и другие важные вещи, которые нужно сказать. Другая полезная страница «info» - это команда «date» - она ​​даст вам представление о том, как вы можете указать аргумент --date. Чтение информационных страниц иногда очень полезно ...
Кэмерон Керр

Ответы:

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, поэтому проверяет, предоставлен ли доступ для чтения владельцем файла
Topr
источник
За исключением того, что ls -l | grep "^r.*Sep"будет иметь тот же результат и гораздо быстрее.
Майкбабкок
0

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

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

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

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

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

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

Бэбкок
источник
-1

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

ls -la | grep -e "Sep"
Икрам
источник
2
Пожалуйста, рассмотрите возможность редактирования этого ответа, чтобы объяснить, что делает эта команда и почему вы ее предлагаете. Аскер явно не уверен, что делать и почему. Ваше руководство, вероятно, будет чрезвычайно полезным.
Анаксунаман