Что делает ls -A?

Попробуйтеlocate

Кажется, findслишком медленный для этого приложения.

  • Существует более быстрый инструмент для поиска файлов,locate. Он использует базу данных, которую необходимо обновить для locate, чтобы найти самые новые файлы.

  • updatedbсоздает или обновляет базу данных, используемую locate. Если база данных уже существует, ее данные используются повторно, чтобы избежать повторного чтения каталогов, которые не изменились.

    Этот процесс обновления очень быстрый по сравнению с find, и при обновлении базы данных locateнайдет все файлы (и намного быстрее, чемfind).

Использование

  • Создать и в следующий раз обновить базу данных

    sudo updatedb
    
  • Найдите соответствующие файлы.locateпредоставляет несколько полезных опций, но не так много опций, как find. Возможно, вы сможете разработать полезный шаблон для своих целей.

    Я предлагаю две командные строки, которые вы можете изменить, а затем объединить с scpили rsync.

    Вы можете ограничить количество файлов с помощью--limit

    Если вы ищете только в /path/from/, а не в подкаталогах -

    locate --regex --limit 1000 '/path/from/A.*random.*'
    

    Если искать не в самом /path/from/, а в его подкаталогах -

    locate --regex --limit 1000 '/path/from/.*/A.*random.*'
    

    Подробнее см. man locate.

Общие комментарии

  • Возможно, вам следует изменить способ записи и хранения этих файлов, например, с несколькими подкаталогами -, чтобы в каждом каталоге не было слишком много файлов, например один подкаталог -для каждой даты (2019-02-12. ], 2019-02-13... ),

    или даже лучше, как многие менеджеры фотографий хранят файлы изображений,

    • один уровень подкаталогов для каждого года
    • следующий уровень подкаталогов для каждого месяца года
    • окончательный уровень подкаталогов для каждого дня месяца, где хранятся файлы.
  • Возможно, вы также можете удалить некоторые файлы (, например, когда они становятся слишком старыми ).

-1
05.04.2021, 23:13
1 ответ

Обычно lsне печатает имена файлов, начинающиеся с точки. С -aда, но сюда входят .и .., которые существуют во всех каталогах и, следовательно, не очень интересны. С -Aон печатает все, кроме этих двух.

$ touch normal.hidden
$ ls
normal
$ ls -a
./ ../ .hidden  normal
$ ls -A
.hidden  normal

В этом операторе if -подстановка команды $(.. )захватывает вывод ls, а [[ -z... ]]проверяет, является ли это пустой строкой. То есть в каталоге нет файлов.

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

См.:

4
28.04.2021, 22:54

Теги

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