переместите команду, не работающую в сценарии удара

Я пытался переместить все кроме нескольких объектов к папке с помощью сценария удара со следующим содержанием. Я попробовал эти команды в терминале сначала и получил ожидаемые результаты, но помещение их в сценарии производит ошибку, упомянутую ниже.

#! /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'

Будет очень полезно, если кто-то мог бы решить это.Заранее спасибо.

0
задан 4 February 2020 в 11:30

2 ответа

Можно использовать, находят, чтобы сделать это:

find -maxdepth 1 -type f ! \( -name '*.img' -o -name '*.log' \) -exec mv {} $1/build_files/ \;

Аргумент -type f делает находят, только ищут регулярные файлы. Необходимо удалить его, если Вы хотите соответствовать какому-либо виду файла.

Аргумент -maxdepth 1 сделайте находят, ищут цели только на текущем каталоге (по умолчанию, начальная точка поиска является текущим каталогом).

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

1
ответ дан 20 February 2020 в 23:02

Быстрое обходное решение к этому, поскольку я реализовал:

#!/bin/bash
mv * build_files/ 2> /dev/null
mv build_files/*.log ./ && mv build_files/*.imx ./ && mv build_files/*.sh ./

Я знаю, что это включает несколько повторений, которые не необходимы, и я открыт для улучшений.

0
ответ дан 20 February 2020 в 23:02

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

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