У меня есть 291 пронумерованных файлов (начиная с 001 - заголовок и заканчивая 291 - заголовок), которые нужно переместить в отдельные каталоги. (От 001 до 021 в папку 1, от 022 до 053 в папку 2, они не обязательно имеют одинаковое количество файлов каждый раз).
Я подумал, что мог бы сделать это так, как это: ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh
Я почти уверен, что есть лучший способ, так что бы это было?
РЕДАКТИРОВАТЬ: Так что это работало бы хорошо, но я вспомнил ...
Я не застрял с помощью терминала, поэтому я использовал файловый менеджер, чтобы нажать и перетащить. Вопрос все еще стоит, хотя.
ls -l | grep ^- | wc -l
бы получить количество строк.Ответы:
Поскольку вы сказали, что это не всегда 21 файл, вам нужно переместить файлы вручную, и для эффективного выполнения этого вы можете использовать расширение скобки :
источник
file{001..21}name
, вам не нужно использовать подстановочный знак. В любом случае, рад, что это сработало для вас.Это переместит файлы, как вы описали (за исключением того, что второй диапазон будет от 022 до 042 для вторых 21 файлов).
источник
Я имею в виду, что нужно переместить много файлов (например, десять тысяч или миллион), оболочка будет слишком долго жаловаться на список файлов, если вы просто используете {1..20}, поэтому
В zsh вы можете загрузить встроенную mv :
после этого вы можете использовать команду как:
или если вы пишете несколько сценариев оболочки, вы можете сделать что-то вроде этого:
если вы не используете zsh, вы можете обратиться к /unix/128559/solving-mv-argument-list-too-long
источник