Ваше решение с массивами должно работать даже с файлами, содержащими пробелы, поскольку вы правильно указали расширения. Однако у вас могут возникнуть проблемы с именами файлов, начинающимися с тире, используйте mv -- file dir/
, чтобы предотвратить это (, или поместите ./
перед глобусами:./*
вместо *
и т. д. ).
Что касается выбора только файлов, я не думаю, что есть способ сделать это непосредственно в Bash (zsh может это сделать, хотя ). Но мы можем просто выбрать список всего и отфильтровать из него обычные файлы :
.#!/bin/bash
dirs=(*/) # directories
tmp=(*) # everything
files=() # files
for f in "${tmp[@]}"; do
if [ -f "$f" ]; then
files+=("$f")
fi
done
for ((i=0 ; i < ${#dirs[@]} ; ++i)); do
mv -- "${files[i]}" "${dirs[i]}"
done
Самый простой способ проверить файлы журналов — запустить работающий Linux. Затем вы можете смонтировать свою систему. Может быть, это будет лучше для вас:https://www.linuxandubuntu.com/home/how-to-boot-into-linux-command-line