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

Прежде всего, код операции не меняется, никогда.

Если у вас нет инсайдерской информации о «микрокоде» 6502, вы не сможете узнать точную реализацию. Таблица данных только дает вам информацию о выполняемой операции, но редко дает информацию о том, как именно это выполняется. Можно только догадываться.

Одно из таких предположений:

  1. Соответствующий бит регистра кода состояния (нормальный или инвертированный в зависимости от инструкции) маскирует операнд команды перехода в ноль, если переход не должен быть взят. 116]

  2. (теперь возможно замаскированное) 8-битное смещение со знаком добавляется в ПК.

136
задан Costique 5 May 2012 в 06:17
поделиться

8 ответов

Поместите следующее в ваш .bashrc

shopt -s extglob

Он расширяет регулярные выражения. Затем вы можете переместить все файлы, кроме одного, с помощью

mv !(fileOne) ~/path/newFolder

Исключений по отношению к другим командам.

Обратите внимание, что при копировании каталогов прямая флеш-память не может использоваться в имени, как было замечено в потоке Почему extglob, кроме прерывания кроме условия? :

cp -r !(Backups.backupdb) /home/masi/Documents/

, поэтому Backups.backupdb / здесь неверно до отрицания, и я не буду использовать его ни в перемещающихся каталогах из-за риска неправильного использования, а затем перетаскивания с другими командами и Возможны и другие исключения.

89
ответ дан 23 November 2019 в 23:37
поделиться

Если Вы используете удар и имеете extglob набор опции оболочки (который обычно имеет место):

mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
133
ответ дан 23 November 2019 в 23:37
поделиться

Я пошел бы с традиционной находкой и xargs путем:

find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png -print0 | 
    xargs -0 mv -t ~/Linux/New

-maxdepth 1 делает его не поиском рекурсивно. Если Вы только заботитесь о файлах, можно сказать -type f. -mindepth 1 заставляет его не включать ~/Linux/Old сам путь к результату. Работы с любыми именами файлов, включая с теми, которые содержат встроенные новые строки.

Один комментарий отмечает что mv -t опция, вероятно, расширение GNU. Для систем, которые не имеют его

find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
    -exec mv '{}' ~/Linux/New \;
67
ответ дан 23 November 2019 в 23:37
поделиться

Следующее не составляет 100%, гарантируемых метод, и нисколько не должно быть предпринято для сценариев. Но несколько раз это достаточно хорошо для быстрого интерактивного использования оболочки. Шарик файла файла как

[abc]*

(который будет соответствовать всем файлам именам, запускающимся с a, b или c) может отрицаться путем вставки "^" символа сначала, т.е.

[^abc]*

Я иногда использую это для того, чтобы не соответствовать "lost+found" каталогу, как, например:

mv /mnt/usbdisk/[^l]* /home/user/stuff/.

Конечно, если существуют другие файлы, запускающиеся с l, я должен обработать их впоследствии.

5
ответ дан 23 November 2019 в 23:37
поделиться

Быстрый путь состоял бы в том, чтобы изменить имя файла смокинга так, чтобы Ваша команда перемещения не соответствовала.

Например:

mv Tux.png .Tux.png

mv * ~/somefolder

mv .Tux.png Tux.png
23
ответ дан 23 November 2019 в 23:37
поделиться

Для удара, sth ответ корректно. Вот является zsh (моя предпочтительная оболочка) синтаксисом:

mv ~/Linux/Old/^Tux.png ~/Linux/New/

Требует EXTENDED_GLOB опция оболочки, которая будет установлена.

13
ответ дан 23 November 2019 в 23:37
поделиться
mv `find Linux/Old '!' -type d | fgrep -v Tux.png` Linux/New

Списки команд находки все регулярные файлы и команда fgrep отфильтровывают любой Tux.png. Обратные галочки говорят mv перемещать получающийся список файлов.

4
ответ дан 23 November 2019 в 23:37
поделиться

Как насчет Вас перемещают все в папку и затем просто кладут обратно Tux.png?

Я не могу думать ни о каком синтаксисе оболочки для высказывания "всего кроме..." бесцеремонно.

2
ответ дан 23 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: