Переместить все файлы, кроме с расширением

Я переместил tar.bz2 из моих загрузок в /usr/src, куда я хотел бы поместить все, что я установил в мою систему. Теперь я извлек файл и хочу переместить его содержимое в /usr/share/icons. Но я не хочу перемещать сам tar.bz2:

# ls -l | grep Comix
-rw-rw-r--  1 guarddog guarddog   2190951 May 26 11:03 ComixCursors-0.8.2.tar.bz2
drwxr-xr-x  3 root     root          4096 Oct 23  2013 ComixCursors-Black
drwxr-xr-x  3 root     root          4096 Oct 23  2013 ComixCursors-Blue
drwxr-xr-x  3 root     root          4096 Oct 23  2013 ComixCursors-Green
drwxr-xr-x  3 root     root          4096 Oct 23  2013 ComixCursors-Orange

В выходной команде я хочу переместить все, кроме tar.bz2, в терминал.

Я попробовал следующее, но, к сожалению, он также перемещает tar.bz2:

 mv Comix*[!tar.bz] /usr/local/share

Я ожидал, что оператор отрицания исключит окончание файла с помощью tar.bz. Решение ниже - то, что я искал, не хотел использовать find со сложными флагами.

3 ответа

Решение

Вы можете использовать GLOBIGNORE переменная bash:

GLOBIGNORE=ComixCursors-0.8.2.tar.bz2

Теперь запустите:

mv ComixCursors* /usr/share/icons/

Также обратите внимание, что когда вы закончите с операцией, это хорошо для unset переменная, чтобы избежать нежелательных сценариев:

unset GLOBIGNORE

Или же

GLOBIGNORE=

Используйте старый добрый find:

find /usr/src -maxdepth 1 -type f -name "Comix*[^\.tar\.bz2]" -print0 | xargs -I{} -0 mv {} /usr/share/icons/

Есть также простая команда для использования, например, в вашем домашнем каталоге. у нас есть папка "Xtest", которая содержит test.tar.gz а также test.txt, test2.txt и т.д. и пустая папка "Xtest2", куда мы хотим переместить все файлы, кроме .tar.gz затем:

cd ~/Xtest
mv !(test.tar.gz) ~/Xtest2

Весь контент кроме test.tar.gz будет перемещен в Xtest2 папка.

Другие вопросы по тегам