#bash #shell
#bash #оболочка
Вопрос:
Я попытался со следующим кодом
CUR_DATE=`date %F`
mkdir "$CUR_DATE"
cd "$CUR_DATE"
mkdir '00UTC'
cd ~/home/scripts/
for f in $(find . -type f -name "*.png")
do
mv $f "~/home/scripts/${CUR_DATE}/00UTC"
done
Здесь все файлы * .png не перемещаются в подпапку 00UTC (которая находится внутри папки с текущей датой).
Любые предложения полезны.
Комментарии:
1. Вы создали подкаталог с буквальным именем 00UTC, и почему вы пытаетесь расширить его как переменную при использовании ${00UTC} ?
2. Кавычки
bash
предотвращают расширение~/
.3. Пожалуйста, предоставьте любое решение в деталях.
4.
all *.png files does not move into
Где находятся эти «все файлы * png»? В каком каталоге они находятся? В~/home/scripts/
?5. ДА. Все файлы png внутри ~/home/scripts/
Ответ №1:
Кавычки bash
предотвращают расширение ~/
. Я предлагаю заменить
mv $f "~/home/scripts/${CUR_DATE}/00UTC"
с помощью
mv "$f" ~/"home/scripts/${CUR_DATE}/00UTC"
или
mv "$f" "$HOME/home/scripts/${CUR_DATE}/00UTC"
Ответ №2:
Хотя Сайрус указал на проблему, есть еще несколько вещей, которые следует учитывать, если это серьезный фрагмент кода:
-
Первые пять строк вашего кода можно выполнить за 2, как это:
CUR_DATE=`date %F` mkdir -p "$CUR_DATE/00UTC"
-
Также вы перемещаете файл png из того же каталога, поэтому нет необходимости использовать ~/ , также будет работать следующее:
for f in $(find . -type f -name "*.png") do mv $f "$(pwd)/$CUR_DATE/00UTC" done
или
for f in $(find . -type f -name "*.png") do mv $f "$CUR_DATE/00UTC" done
-
Кроме того, повторный запуск одного и того же кода приведет к появлению тех же ошибок в файлах (хотя это не приведет к искажению) при перемещении файлов, которые уже перемещены.