6

Я провел небольшой поиск в Интернете и пытаюсь найти способ рекурсивного вывода списка всех файлов с указанием их абсолютного пути и разрешений. Я хочу сделать это так , что я могу grep что я хочу, так что , когда я запускаю команду, я могу получить только совпадающие файлы, их права, и их полные пути, как:

<search command> | grep file.name

Выход:

/home/current/Desktop/file.name
/etc/program/src/file.name

Я бы предпочел использовать ls потому что он самый быстрый, и я бы набрал:

ls -alR $PWD/

Но это не показывает путь к файлу, так что, если я grep 'отредактировал вывод, то я бы увидел права доступа к файлу, но не каталог, из которого он возник.

Я могу использовать ls интегрированный с find и grep чтобы получить вывод в том формате, который мне нужен, и я мог бы использовать что-то вроде этого:

ls -ault `find $PWD/ -type f` | grep file.name

Но это очень медленно, я полагаю, потому что на самом деле работают две команды.

Если я просто использую find без ls или grep , то он пойдет быстрее, но набрать:

find $PWD/ -type f -name file.name -printf '%M %u %g %s\t%a\t%p\r\n'

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

Есть ли более быстрый способ сделать то, что я пытаюсь сделать, чем использовать find?

4 ответа4

8

Вместо ls или find вы можете попробовать tree . В частности, tree -ifpugDs $PWD должно дать вам то, что вы хотели бы.

-if удаляет отступы и выводит путь

-p печатает разрешения

-ug печатает пользователя и группу

-D печатает время модификации

размер -s печатает

3

Если печатать это проблема, как насчет того, чтобы поместить то, что у вас уже есть в функцию:

myspecialfinder() {
  find $PWD/ -type f -name "$1" -printf '%M %u %g %s\t%a\t%p\r\n'
}

Вы бы использовали его как

myspecialfinder file.name
1

Простой ответ: find -type f -print0 | xargs -0 ls -al

0
--tree -ifpugDs $PWD-- etc.

Очень близко. Проблема в $PWD , которая приводит к бесполезному мусору, если у вас есть настоящие имена файлов, а не имена файлов в стиле Unix, то есть без пробелов. Чтобы заставить его работать в любой файловой системе, например, NTFS, вам нужно заключить в кавычки $ PWD.

Я использую C-shell, так как я был пользователем Berkeley /Sun в лаборатории, но те же идеи применимы и в bash.

tree -if "$PWD"

Теперь, если ваше имя файла

/home/he/Documents/00 - Writing/02 The Rapture of the Maiden/0 - Text/25th/Rapture, pt 1-4, ch 01-20 old.txt, 

это не дерьмо, как только оно попадает в пространство.

Я большой поклонник имен файлов на английском языке, то есть не таких как RSFunc97Stat.txt. Возможно, потому что, в отличие от большинства программистов, я могу набирать десять цифр с нормальной скоростью записи - немногим людям нужно набирать более 40 слов в минуту так быстро, как они могут сочинять. Большинство техников, с которыми я работал, используют метод «3 пальца на одной руке, 2 на другом», и им нравится использовать короткое имя переменной, не нравится комментировать, и в целом их нельзя сосчитать. чтобы помочь с пользователем док. Кроме того, это старая привычка со времен, когда у вас есть только 8 символов, чтобы сказать это.

В настоящее время нам необходимо поддерживать все имена файлов, даже "Army's.txt O'Reilly". У меня даже есть тестовый элемент базы данных во всех созданных мной базах, который называется тестом O'Reilly. Многие программы полностью терпели неудачу, когда текстовое поле имело кавычку или лидирующий темп и т.д. Хорошей новостью является то, что tcsh автоматически завершает ваши файлы и цитирует их в соответствии с правильным archanesyntax.

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