Можно перемещать, но нельзя удалять из сценария оболочки

Была похожая проблема на почтовом сервере, просто поместите этот список в текстовый файл file01.txt, затем примените следующую команду:

cat file01.txt | sed 's/[ \t]/;/g' > file02.txt

1
19.11.2020, 17:57
1 ответ

Вы не делаете то же самое с mvкак с rm. Посмотрите на аргументы пути, которые вы им даете:

rm -rf "/home/user/project/uploads/media/*"
mv     "/home/user/project/uploads/media"  ...

"/home/user/project/uploads/media/*"заключен в кавычки, поэтому *не является особенным и будет передан rmкак есть. Далее он удаляет файл, который буквально называется /home/user/project/uploads/media/*. Там, вероятно, не один. Вы не получите сообщение об ошибке, потому что вы использовали флаг -f, который сообщает rm«Игнорировать несуществующие файлы и отсутствующие операнды и никогда не запрашивать у пользователя». (как сказано в руководстве GNU).

Спецификация POSIX еще более подробно описывает -fзапрет любых сообщений об ошибках или предупреждений:

For each file the following steps shall be taken:

  1. If the file does not exist:
    a. If the -f option is not specified, rm shall write a diagnostic message to standard error.
    b. Go on to any remaining files.

Если вы не использовали -f,он сказал бы что-то вроде:

rm: cannot remove '/home/user/project/uploads/media/*': No such file or directory

Или, если вы сделаете то же самое с mv, как и в mv "/home/user/project/uploads/media/*"..., он будет жаловаться, даже с mv -f.

Даже без кавычек, /home/user/project/uploads/media/*, это не то же самое, что /home/user/project/uploads/media. Другой расширяется до списка всех файлов в каталоге (, кроме точечных файлов, обычно ), а другой называет сам каталог. Помимо точечных файлов, есть разница в том, что rm -r.../media/*оставит сам каталог media, а rm -r.../mediaтакже удалит его.

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

1
28.04.2021, 23:04

Теги

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