2

У меня есть 5 файлов в каталоге

log.txt
abc.pdf
def.ppt
1CC
1DD

Теперь я хочу переместить файлы, не имеющие расширения, например, 1CC и 1DD, в другой каталог, т.е. в дерево.

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

command : 
shopt -s extglob
mv !(*.*) tree

но в скрипте bash он показывает скрипт ошибки:

#/bin/bash
mkdir tree
shopt -s extglob
mv !(*.*) tree/

и сохранен как stuct.sh после запуска

это показывает следующую ошибку:

struc.sh: line 11: syntax error near unexpected token `('
struc.sh: line 11: `mv !(*.*) tree/'

Я понятия не имею, почему это происходит. Пожалуйста, предоставьте решение для того же. Спасибо

1 ответ1

2

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

Вы можете лучше использовать find для этого:

find . -maxdepth 1 -type f ! -name "*.*" -exec mv -t ./tree/ {} \+

Эта команда будет:

  • find поиск
  • . в текущем каталоге
  • -maxdepth 1 с глубиной 1 (поэтому нет подкаталогов)
  • type -f только файлы
  • ! -name "*.*" где имя файла не соответствует *.*
  • -exec mv -t ./tree/ {} \+ выполнить команду mv , аргумент -t указывает целевой каталог (tree в текущем каталоге (.)) и добавляет (\+) имя файла ({}) к нему ,

Это будет работать в вашем скрипте bash, и он не будет пытаться переместить каталоги или каталог вашего собственного tree в себя (что попытается выполнить ваша команда mv ).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .