Ext4 и Linux -очень большое количество файлов в одном каталоге -операции

Если имя вашего файла называется Myfile.txt, вы можете запустить:

grep -Ev '[Tt][Tt]|[Hh][Hh]' Myfile.txt |  awk '{ gsub("([^[:alnum:]]|^)[[:alnum:]]{4}([[:space:]]|[[:punct:]])"," D ");print $0}' > MyEditedFile.txt
0
21.07.2020, 20:02
2 ответа

Попробуйте запустить:

ls --sort=none --no-group

или ограничиться некоторым количеством файлов, например.

ls --sort=none --no-group | head -500
2
18.03.2021, 23:18

Использование lsдля работы с большим каталогом очень неэффективно, так как GNU lsбудет читать все записи в каталоге, прежде чем возвратить любую из них, даже с --sort=none, потому что он хочет, чтобы вывод был "красивым". Это медленно и использует много оперативной памяти, поскольку каталог ext4 может содержать миллионы файлов.

Вместо этого вы должны использовать findдля вывода списка файлов в каталоге, который будет распечатывать имена файлов, как только они будут прочитаны из каталога. Если вы хотите найти определенные файлы (, например. все файлы «*.jpg» размером менее 1 МБ ), вы можете запустить, например.

find /my/directory -type f -name "*.jpg" -size -1M

См. find (1 )справочную страницу для получения полной информации о том, как его использовать.

Как только вы найдете кучу файлов, с которыми хотите что-то сделать, вы можете использовать xargsдля запуска команды для каждого файла. Например, для удаления временных файлов используйте, например.:

find /my/directory -name "*.tmp" -type f -print0 | xargs -0 rm

или переместить их в другой каталог, например:

find /my/directory -name "*.jpg" -print0 | xargs -0 -I '{}' mv '{}' /my/otherdirectory

или что-то еще. Программа xargsзапускает специальную команду для каждого файла, который она считывает из стандартного ввода, подробности см. в xargs (1 )справочной странице . Команда mvнемного сложнее, чем rm, потому что mvнужно поместить целевой каталог в конец команды, а xargsобычно добавляет все файлы после указанной команды.

Вместо этого вы можете сохранить список файлов в выходной файл, например find... > /tmp/file_list, а затем отредактировать file_list, чтобы он содержал только те файлы, которые вы хотите удалить/переместить, и передать их в xargsотдельно:

xargs -a /tmp/file_list -I '{}' mv '{}' /my/otherdir
1
18.03.2021, 23:18

Теги

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