У меня в папке разные файлы, и я подумал, что могу просто сделать:
mv '*.(png|jpg|gif)' images/
чтобы они были перемещены в папку изображений. Но это не работает ... какие-нибудь мысли?
Используйте функцию в bash, которая называется расширением скобок
mv *.{png,gif,jpg} images
mv *.png *.jpg *.gif images/
должен сделать это
А какую оболочку вы используете?
У Гоксу правильный ответ. Нет причин, по которым вы должны делать что-то более эзотерическое, если вы можете сделать это более простым и понятным способом.
В конце оболочка расширяет команду, чтобы включить все файлы перед передачей списка в команду mv
, так что на самом деле нет никакого выигрыша или потери производительности, если делать это по-другому.
Однако, если вы хотите быть Mister Fancy Pants, вы должны знать, что и Bash, и Kornshell (оба доступны в OS X) могут делать следующее, используя расширенные выражения glob:
$ mv *(*.png|*.jpg|*.gif) images
Расширенные выражения глобуса (так называемое сопоставление с образцом) действительно полезны, когда вы хотите удалить из каталога все, кроме одного файла. Например, вы расширили архив tar и хотите удалить все файлы, кроме архива tar:
$ rm -rf !(foo.tar.gz)
Особенность Bash в том, что сначала вы должны включить эту функцию с помощью команды shopt :
$ shopt -s extglob
Взгляните на справочную страницу Bash и посмотрите на раздел Pattern Matching. Он содержит множество аккуратных трюков с оболочкой, о которых не так много людей знают. Он дает вашей оболочке некоторые секретные сверхсилы, но всегда помните об их использовании, чтобы помочь человечеству, а не во зло.