У меня есть ряд пронумерованных файлов (изображений), и я хочу переместить их в подкаталог. https://superuser.com/questions/380338/move-a-range-of-numbered-files# = предлагает использовать

mv IMG_{001-022}.jpg subdir

Проблема заключается в том, что, учитывая, что число является меткой времени, а не последовательными числами. Вышеуказанное не работает в моем случае.

Вопрос в том, как бы вы поступили с вышесказанным в непоследовательных числах.

Изменить: Обратите внимание, что в данном конкретном случае, например, существуют файлы с номерами IMG_045.jpg. Я хочу только любой файл, который был между IMG_001-IMG_022

2 ответа2

2

Чтобы переместить все файлы в форме IMG_nnn.jpg где nnn - три цифры и не обязательно последовательные, используйте:

mv IMG_[0-9][0-9][0-9].jpg subdir

Для перемещения только файлов с номерами, скажем, от 001 до 0022, можно использовать:

mv IMG_{001..022}.jpg subdir

Проблема с вышеупомянутым состоит в том, что он будет генерировать сообщения об ошибках для каждого файла, который не существует. Сообщения выглядят так:

mv: cannot stat `IMG_014.jpg': No such file or directory

Однако просто игнорировать эти сообщения. Использование:

mv IMG_{001..022}.jpg subdir 2>&1 | grep -v "cannot stat"
0

Я бы использовал xargs для этого:

ls IMG_{001..022}.jpg 2&> /dev/null|xargs -I {} mv {} subdir/

Кроме того, поскольку я хотел бы сначала протестировать все это перед тем, как его использовать, я бы начал с получения команды ls для вывода того, что вы хотите. Как только вы достигнете совершенства, просто добавьте часть xargs. Я считаю, что это лучший способ сделать это правильно каждый раз.

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