Вы можете попробовать следующее:
for i in *.1.gz; do mv "$i" "$(basename $i.1.gz).$(date +'%Y%m%d%H%M').gz"; done
basename
извлечет первую часть имени файла.
Обратите внимание, что команда date
использует одинарную кавычку '
, а не ту, которую вы указали в своем вопросе.
Необходимое разрешение — это разрешение на выполнение. Но у вас есть некоторые ошибки в вашем скрипте, попробуйте запустить его, и он ясно покажет вам первую ошибку
$ chmod u+x jason.sh
$./jason.sh
Please enter your name.
Jason
./jason.sh: line 4: syntax error near unexpected token `then'
./jason.sh: line 4: `then'
Исправьте это и запустите снова, и вы получите
$./jason.sh
Please enter your name.
Jason
Good day Jason, here is your calendar for this month:
February 2020
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
Today is Friday
./jason.sh: line 7: test: -lt: unary operator expected
Нельзя так сравнивать даты, проверьте Как сравнить две даты в шелле?
Нам требовалось разрешение на выполнение скрипта, если мы не работаем с правами root на переднем плане.
chmod +x scriptName.sh
И в сценарии есть несколько синтаксических ошибок, вы можете использовать приведенную ниже.
#!/bin/bash
echo "Please enter your name."
read name
echo "Good day $name, here is your calendar for this month:"
cal
echo "Today is" `date +%A`
if [ "`date +%A`" == Friday ]
then
echo "TGIF"
fi
Для выполнения скрипта вам необходимо разрешение на выполнение и чтение. В конце концов, это интерпретативный язык, и ядро должно читать его (построчно ). Команда для предоставления этих разрешений :"
chmod u+rx script.sh
Конечно, вы можете запустить его с разрешением только на чтение в качестве параметра интерпретатора оболочки:
bash script.sh
Привет, Джейсон, можешь попробовать
chmod u=rx,g=x,o=rwx jason.sh