Я пытался переместить все кроме нескольких объектов к папке с помощью сценария удара со следующим содержанием. Я попробовал эти команды в терминале сначала и получил ожидаемые результаты, но помещение их в сценарии производит ошибку, упомянутую ниже.
#! /bin/bash
shopt -s extglob
mv !(*.log | *.img) $1/build_files/ 2> /dev/null
ОШИБКА:
build.sh: line 36: syntax error near unexpected token `('
build.sh: line 36: ` mv !(*.log|*.img) $1/build_files/ 2> /dev/null'
Будет очень полезно, если кто-то мог бы решить это.Заранее спасибо.
Можно использовать, находят, чтобы сделать это:
find -maxdepth 1 -type f ! \( -name '*.img' -o -name '*.log' \) -exec mv {} $1/build_files/ \;
Аргумент -type f
делает находят, только ищут регулярные файлы. Необходимо удалить его, если Вы хотите соответствовать какому-либо виду файла.
Аргумент -maxdepth 1
сделайте находят, ищут цели только на текущем каталоге (по умолчанию, начальная точка поиска является текущим каталогом).
См. страницу справочника находки для большего количества опций и различных типов файлов, для которых можно быть нацелены.
Быстрое обходное решение к этому, поскольку я реализовал:
#!/bin/bash
mv * build_files/ 2> /dev/null
mv build_files/*.log ./ && mv build_files/*.imx ./ && mv build_files/*.sh ./
Я знаю, что это включает несколько повторений, которые не необходимы, и я открыт для улучшений.