mv с символом подстановки завершается с ошибкой «Нет такого файла или каталога», если файлы не соответствуют шаблону - PullRequest
1 голос
/ 31 октября 2019

Я выполняю следующую команду:

mv logs/*.log logs/bak/

Теперь, когда моя папка журналов содержит файл, который соответствует *.log, она работает нормально.

Однако, если нетсоответствующий файл, он выдает ошибку

mv: cannot stat 'logs/*.log': No such file or directory

Как я могу сделать эту работу?

РЕДАКТИРОВАТЬ Я пытаюсь выполнить этот выход с нулевым кодом состояния, ничего не делая, чтобы я мог использовать это в процессе сборки

1 Ответ

1 голос
/ 31 октября 2019

Используйте find вместо mv:

Например:

find logs -maxdepth 1 -type f -exec mv '{}' logs/bak  \;

... и, пока вы экспериментируете с этой командой, добавьте к ней echo и/ или используйте подробный:

find logs -maxdepth 1 -type f -exec echo mv '{}' logs/bak  \;
find logs -maxdepth 1 -type f -exec mv -v '{}' logs/bak  \;

Обратите внимание на опции:

-maxdepth 1: запретить рекурсию в подкаталоги

-type f: рассматривать только обычные файлы

Чтобы соответствовать только файлам, оканчивающимся на .log, вы можете добавить опцию:

-name *.log

РЕДАКТИРОВАТЬ ПО OP

Итак, последняя команда выглядит так:

find logs -maxdepth 1 -type f -name \*.log -exec mv -v '{}' logs/bak  \;
...