Мне интересно, можно ли использовать bash для mv
нескольких файлов с разными расширениями в один каталог, например
mv 1.png 2.jpg dir/
кроме совпадения многих файлов
Используйте шары ! Глоб - это шаблон, который расширяется до нескольких имен файлов. Это также очень хорошо объяснено здесь.
Например, *
соответствует любой строке любой длины, и вы можете переместить все файлы JPG и PNG куда-нибудь с помощью:
mv *.jpg *.png dir
Используя опцию extglob
в Bash, вы также можете сделать:
shopt -s extglob
mv *(*.jpg|*.png) dir
Простейшим способом было бы использовать сочетание расширения скобки и сглаживания
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)
Да, это так.
$ 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 не заботится о расширениях файлов, все, что он знает, - это исходный файл и целевой каталог, запрошенный вами.