Как я могу переместить все файлы, кроме одного? Я ищу что-то вроде:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
где я перемещаю старые вещи в новые вещи - папки, кроме Tux.png
. ! -знак представляет собой отрицание. Есть ли какой-нибудь инструмент для работы?
Поместите следующее в ваш .bashrc
Это расширяет регулярные выражения. Затем вы можете переместить все файлы, кроме одного,
Исключения по отношению к другим командам
Обратите внимание, что при копировании каталогов прямая вспышка не может использоваться в имени, как отмечено в потоке. Почему extglob, кроме разрыва, кроме условия? :
так
Backups.backupdb/
что здесь не так до отрицания, и я бы не стал использовать его ни в перемещении каталогов из-за риска неправильного использования, а затем с другими командами и возможными другими исключениями.источник
mv !(arc*) archive_190629b
Я бы пошел с традиционным способом find & xargs:
-maxdepth 1
делает это не искать рекурсивно. Если вы заботитесь только о файлах, вы можете сказать-type f
.-mindepth 1
заставляет не включать сам~/Linux/Old
путь в результат. Работает с любыми именами файлов, в том числе с теми, которые содержат символы новой строки.В одном комментарии отмечается, что
-t
опция mv является, вероятно, расширением GNU. Для систем, у которых его нетисточник
Быстрый способ - изменить имя файла смокинга, чтобы ваша команда перемещения не соответствовала.
Например:
источник
Я думаю, что самый простой способ сделать это с помощью клюшки
Редактировать:
Вместо этого используйте обратную косую черту с ls, чтобы не использовать ее с псевдонимом, т. Е. В основном ls имеет псевдоним ls --color.
Спасибо @Арнольд Роа
источник
grep -v
там?Для bash ответ правильный. Вот синтаксис zsh (мой выбор оболочки):
Требуется
EXTENDED_GLOB
опция оболочки для установки.источник
Я считаю, что это немного безопаснее и проще для простых шагов, которые исключают определенные файлы или каталоги.
источник
-l
Вариантls
будет включать в себя много неактуальной информации в командной строке и привести к выходу из строя команды мв.Следующее не является гарантированным на 100% методом, и его вообще не следует пытаться использовать для сценариев. Но иногда это достаточно для быстрого использования интерактивной оболочки. Файловый файл как
(который будет соответствовать всем файлам с именами, начинающимися с a, b или c) можно отменить, вставив сначала символ «^», т.е.
Иногда я использую это для несоответствия директории lost + found, например:
Конечно, если есть другие файлы, начинающиеся с l, я должен обработать их потом.
источник
Команда find выводит список всех обычных файлов, а команда fgrep отфильтровывает любой Tux.png. Обратные галочки говорят mv переместить полученный список файлов.
источник
Как насчет того, чтобы переместить все в папке, а затем просто переместить Tux.png обратно?
Я не могу придумать какой-либо синтаксис оболочки, чтобы сказать «все, кроме ...» от руки.
источник
источник
ls ~/Linux/Old/ | grep -v Tux.png | xargs -I{} mv {} ~/Linux/New/
работает вместоКак насчет:
Вы должны быть в папке, хотя.
источник
Можно пропустить grep следующим образом:
источник
Это может быть проще и легче запомнить, и это работает для меня.
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination
источник