У вас есть несколько проблем.
Когда файл не пустой, вы пропускаете код, который спрашивает пользователя, хотят ли они переместить файл, но вы все равно выполняете код, который перемещает файл. Он использует значение $useranswer
из предыдущего файла, поэтому он перемещает все непустые файлы после перемещения пустого файла, пока не перейдет к следующему пустому файлу. Код, который выполняет перемещение, должен находиться внутри if
, который проверяет длину.
Проверка на то, печатать ли «Пустые файлы не найдены», просто неверна. $currentfiles
- это список всех файлов, а не пустых файлов. И ваш тест задом наперед: вы проверяете, не является ли переменная пустой. Что вы должны сделать, это установить переменную, когда вы найдете пустой файл. Затем, после выполнения l oop, вы можете проверить эту переменную.
Существует встроенный тест для определения того, имеет ли файл ненулевой размер, вам не нужно использовать du
для этого.
Вы не должны анализировать выходные данные ls
, используйте подстановочный знак.
Если вы собираетесь напечатать сообщение о том, что перемещение было успешным, вы должны на самом деле проверить, что оно было .
Вопрос, спрашивающий, хотят ли они переместить файл, не говорит, какой это файл.
emptyfound=n
for eachfile in *
do
if [ ! -s "$eachfile" ] # check if any files are empty
then
emptyfound=y
echo -n "Would you like to move the file $eachfile Y/N:" # if a file is empty ask the user if the want to move the file
read useranswer
if [ "$useranswer" = "y" ] || [ "$useranswer" = "Y" ]
then
if mv "$eachfile" /home/student/Empty_Files
then echo "mv command successful"
else echo "mv command failed"
fi
else
echo "File will not be moved"
fi
fi
done
if [ "$emptyfound" = n ]
then
echo "no empty files found in the current directory"
#exit 55
fi