Настолько глупо, что я использовал следующий сценарий на моем сервере 19.04 в попытке переместить несколько видеофайлов в папки с префиксами:
dirs=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
shopt -s nocasematch
for file in *
do
for dir in "${dirs[@]}"
do
if [ -d "$file" ]; then
echo 'this is a dir, skipping'
break
else
if [[ $file =~ ^[$dir] ]]; then
echo "----> $file moves into -> $dir <----"
mv "$file" "$dir"
break
fi
fi
done
done
Понятия не имею, где это пошло не так, но вместо того, чтобы перемещать файлы в папки, они пошли в единый вывод ..
----> a1.ts moves into -> A <----
----> a2.ts moves into -> A <----
----> a3.ts moves into -> A <----
----> a4.ts moves into -> A <----
----> a5.ts moves into -> A <----
----> c1.ts moves into -> C <----
----> c2.ts moves into -> C <----
----> c3.ts moves into -> C <----
----> c4.ts moves into -> C <----
----> c5.ts moves into -> C <----
К счастью, я остановил процесс (CTRL + C), как только заметил, что он идет не так, как задумано, и не прошел всю папку.
Так что теперь у меня есть эти файлы A
и C
, которые меньше, чем Гб, и, судя по всему, это одно видео.
В общем объеме использования самой папки на диске не хватает 50 ГБ, но общее дисковое пространство компьютера осталось прежним. Заставить меня думать, что файлы не удалены?
Любая помощь приветствуется, спасибо :)
Редактировать: файлы фактически исчезли, остается только последний записываемый файл, все, что потребовалось, - это некоторое время, чтобы обновить информацию об использовании диска. Мораль истории, запускайте свои сценарии на фиктивных файлах раньше!
mv "$file" "$dir/"
, с трейлингом /
; тогда, если $dir
не существует, mv
произойдет ошибка вместо переименования $file
в $dir
. Также рассмотрим mv -i
и mv -n
. И всегда делайте mkdir -p
перед переездом, для хорошей меры.
A
,B
и так далее существовали перед запуском сценария? Если нет, вы просто переименовали файлы. Все файлы, имена которых начинаются сa
илиA
были переименованыA
, поэтому сохранился только последний переименованный файл, остальные перезаписываются. Для вызова переменнойdir
не создается каталог!