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

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

Я переместил 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 со сложными флагами.

решение1

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

GLOBIGNORE=ComixCursors-0.8.2.tar.bz2

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

mv ComixCursors* /usr/share/icons/

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

unset GLOBIGNORE

Или

GLOBIGNORE=

решение2

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

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

решение3

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

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

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

Связанный контент