3

Мне интересно, можно ли использовать bash для mv нескольких файлов с разными расширениями в один каталог, например
mv 1.png 2.jpg dir/

кроме совпадения многих файлов

3 ответа3

1

Используйте шары ! Глоб - это шаблон, который расширяется до нескольких имен файлов. Это также очень хорошо объяснено здесь.

Например, * соответствует любой строке любой длины, и вы можете переместить все файлы JPG и PNG куда-нибудь с помощью:

mv *.jpg *.png dir

Используя опцию extglob в Bash, вы также можете сделать:

shopt -s extglob
mv *(*.jpg|*.png) dir
1

Простейшим способом было бы использовать сочетание расширения скобки и сглаживания

mv -iv -- *.{png,jpg} dir/

Который расширяется до

mv -iv -- *.png *.jpg dir/

Который расширяется до (все файлы, включая dirs/symlincs, заканчивающиеся на .png или .jpg)

mv -iv -- 1.png 2.jpg ... dir/

Примечание: -iv -- в том числе для безопасности / многословия

-i, --interactive
       prompt before overwrite
-v, --verbose
       explain what is being done
[GETOPT] The special argument "--" forces an end of option-scanning 
         regardless of the scanning mode. 
         (Meaning everything after it gets treated as an argument)
-1

Да, это так.

$ tree
.
├── a.png
├── b.jpg
└── dir

1 directory, 2 files
$ mv a.png b.jpg dir
$ tree
.
└── dir
    ├── a.png
    └── b.jpg

1 directory, 2 files
$ 

mv не заботится о расширениях файлов, все, что он знает, - это исходный файл и целевой каталог, запрошенный вами.

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