
Я переместил 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
папку.