Вы действительно можете использовать ( *.exe ) для решения этой проблемы в bash.
Помещение круглых скобок, подобных этому ( и ) вокруг шаблона, означает, что оно будет расширено и сохранено в array.
Затем вы можете перебирать каждый элемент массива, используя что-то вроде этого:
exes=( *.exe )
for exe in "${exes[@]}"; do
echo "'$exe'"
done
Вот полный пример:
$ mkdir 'dir
> with
> spaces'
$ touch 'dir
> with
> spaces/dir
> with
> spaces'
$ touch 'dir
> with
> spaces/other
> file'
$ find .
.
./dir?with?spaces
./dir?with?spaces/dir?with?spaces
./dir?with?spaces/other?file
$ cd 'dir
> with
> spaces'
$ files=( * )
$ for file in "${files[@]}"; do
> echo "'$file'"
> done
'dir
with
spaces'
'other
file'
I может предоставить только полное решение после того, как вы выясните, как выглядит ваша структура каталогов, потому что я не уверен, что current_dir_name делает то, что вы думаете.
Наименьшее количество пространства, которое может быть выделено на диске, называется «сектором» - исторически это было 512 байт, но более новые жесткие диски имеют более крупные секторы размером 4096 байт (хотя я не уверен, что «логические сектора» 4096 байт, или они все еще 512 байт).
Итак, если у вас есть файл размером всего 1 байт, он по-прежнему будет занимать 512 байт на диске.
Большинство файлов намного больше, чем несколько байтов, поэтому разница обычно составляет всего несколько процентов. Я не уверен, есть ли у вас сотни миллионов крошечных файлов в папке «Загрузка», но это объясняет это поведение.
Это, вероятно, связано с большим количеством мелких файлов, каждый файл занимает не менее 1 блока или сектора. Возможно и наоборот, с разреженными файлами. У вас может быть файл размером в несколько гигабайт, который занимает всего пару килобайт на диске (ls -lh и du -sh в файле покажут эту разницу). Большая строка из 0-байтов не сохраняется на диске, но сохраняется как метаданные («byte X til X + 10013434 равно 0»).