Переместить все файлы, кроме с расширением
Я переместил 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
папка.