
#!/bin/sh
if [ -e $1 ] ; then
mv $1 $1_$(date +%Y%m%d%H%M)
fi
exit 0
Мне нужно найти файл и если файл существует, то переименовать его и выйти из программы, нам нужно переименовывать только если файл существует
получаю указанную выше ошибку
решение1
Вообще говоря, переменные bash всегда следует заключать в двойные кавычки.
Например, пусть $1 — это My File.txt
. Ваш скрипт пытается сделать это:
mv My File.txt My File.txt_201501010101
что mv
означает, что вы хотите переместить файлы My
, File.txt
, и My
все вместе в место назначения File.txt_201501010101
.
Вместо этого вам нужно следующее:
mv "My File.txt" "My File.txt_201501010101"
Более подробную информацию и другие подводные камни, которых следует избегать, смотрите ниже: http://mywiki.wooledge.org/BashPitfalls#cp_.24file_.24target
PS exit 0
в конце скрипта излишен. Если скрипт завершается без ошибок, то статус выхода неявно равен 0.