Введение
Один из моих серверов разработки содержит миллионы файлов в одном каталоге. Чтобы освободить место на диске, мы решили переместить к ним новую папку, созданную на другом диске, подключенном к той же системе. Когда я попытался переместить файл с помощью команды mv
, я получил следующую ошибку:
-bash: /bin/mv: слишком длинный список аргументов
Ошибка «Слишком длинный список аргументов» обычно возникает, когда вы передаете большое количество параметров одной команде. Системная переменная ARG_MAX определяет максимальную длину символов аргументов в команде оболочки.
Решение
Быстрое исправление — использовать xargs
командной строки xargs или найти команду с -exec… {}. Обе команды разбивают большую команду на меньшую и завершают работу без ошибок.
Использование find с xargs. Следующая команда переместит все файлы с расширением.txt в целевой каталог:
find. -name '*.txt' | xargs mv --target-directory=/path/to/dest_dir/
Использование find с exec: Вы также можете использовать exec для выполнения той же задачи:
find. -name '*.txt' -exec mv {} /path/to/dest_dir/\;
Вышеуказанные предопределенные команды будут рекурсивно перемещаться по подкаталогам. Чтобы ограничить поиск только текущим каталогом, используйте -maxdepth
, за которым следует номер ограничения до подкаталогов:
find. -name '*.txt' -maxdepth 1 -exec mv {} /path/to/dest_dir/\;
Вы можете найти максимальное ограничение с помощью команды getconf ARG_MAX
в оболочке.
Вывод
В этом уроке мы увидели, как решить ошибку: «-bash: /bin/mv: слишком длинный список аргументов»