Найдите файлы/папки в папке кроме некоторых определенных папок

Я пытаюсь переместить все файлы от одной папки до другого, кроме некоторых определенных папок.

Я попробовал это для перемещения всех файлов кроме .git, assets или build папки:

find .. ! -regex '\(.git\|assets\|build\)' | xargs mv -t ../build

Что я кроме этой команды, чтобы сделать:

  • Найдите все файлы/папки в родительской папке, которые не являются .git, активами или сборкой.
  • Переместите те файлы/папки в../создавать

Структура папок похожа на это:

.
├── application
├── assets
├── build
├── download_files
├── images
├── mybb
├── system
└── tools

Мой рабочий каталог является папкой инструментов.

Если я выполняюсь find .. ! -regex '\(.git\|assets\|build\)' это все еще показывает .git, assets и сборка.

Что случилось с моей командой?

3
задан 6 August 2012 в 18:30

2 ответа

Возможно, вы пропустили некоторые символы подстановки, попробуйте

find .. ! -regex '\(.*\/\.git.*\|.*\/assets.*\|.*\/build.*\)'

Я также включил разделитель пути (/), чтобы ресурсы или сборка, отображаемые как часть пути, не совпадали.

0
ответ дан 6 August 2012 в 18:30

Вы также можете использовать расширенные глобусы bash для фильтрации этих каталогов. Сначала убедитесь, что extglob включен.

shopt -s extglob

затем

mv ../!(assets|build) ../build

Глобус не будет соответствовать файлам, начинающимся с ., поэтому нет необходимости отфильтровывать .git. Однако, если вы хотите переместить другие файлы, начиная с ., включите также опцию оболочки dotglob.

shopt -s extglob dotglob
mv ../!(.git|assets|build) ../build
0
ответ дан 6 August 2012 в 18:30

Другие вопросы по тегам:

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