Задать вопрос
GlebSmor
@GlebSmor

Как исправить скрипт?

#!/bin/bash
cd $1
ls -la
for file in $(ls $1)
do

date=$(stat --printf '%w' $file | awk '{print $1}')
test=$(echo "$file" | grep -o $date)

if [[ $test == '' ]]; then
  mv $file $date-$file
fi

done


Есть такой скрипт который добавляет к файлу дату его создания, он работает, но все ломается если в названии файла есть пробелы. Как можно это исправить?
  • Вопрос задан
  • 93 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Достаточно обернуть все $file в кавычки:
date=$(stat --printf '%w' "$file" | awk '{print $1}')

mv "$file" "$date-$file"

Но пробелы в названиях, в твоём случае, не единственная возможная проблема. Парсить вывод ls считается плохой практикой. Вместо этого надёжнее использовать глобы:
for file in "$1"/*

Про причины хрупкости парсинга вывода ls можно почитать тут:
https://mywiki.wooledge.org/ParsingLs
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rababo9996
Developer
Here's the corrected script:

#!/bin/bash
cd "$1"
ls -la
for file in $(ls "$1")
do
date=$(stat --printf '%w' "$file" | awk '{print $1}')
test=$(echo "$file" | grep -o "$date")

if [[ $test == '' ]]; then
mv "$file" "$date-$file"
fi

done
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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