Я пытаюсь переместить все файлы от одной папки до другого, кроме некоторых определенных папок.
Я попробовал это для перемещения всех файлов кроме .git
, assets
или build
папки:
find .. ! -regex '\(.git\|assets\|build\)' | xargs mv -t ../build
Что я кроме этой команды, чтобы сделать:
Структура папок похожа на это:
.
├── application
├── assets
├── build
├── download_files
├── images
├── mybb
├── system
└── tools
Мой рабочий каталог является папкой инструментов.
Если я выполняюсь find .. ! -regex '\(.git\|assets\|build\)'
это все еще показывает .git
, assets
и сборка.
Что случилось с моей командой?
Возможно, вы пропустили некоторые символы подстановки, попробуйте
find .. ! -regex '\(.*\/\.git.*\|.*\/assets.*\|.*\/build.*\)'
Я также включил разделитель пути (/), чтобы ресурсы или сборка, отображаемые как часть пути, не совпадали.
Вы также можете использовать расширенные глобусы bash для фильтрации этих каталогов. Сначала убедитесь, что extglob включен.
shopt -s extglob
затем
mv ../!(assets|build) ../build
Глобус не будет соответствовать файлам, начинающимся с .
, поэтому нет необходимости отфильтровывать .git
. Однако, если вы хотите переместить другие файлы, начиная с .
, включите также опцию оболочки dotglob.
shopt -s extglob dotglob
mv ../!(.git|assets|build) ../build