Попробуйте выполнить команды: free, top или cat /proc/meminfo
С помощью top вы можете нажать shift + m для сортировки процессов с использованием (резидентной) памяти.
Используйте find с test -e your_file, чтобы проверить, существует ли файл. Например, вы ищете каталоги, у которых нет в них cover.jpg:
find base_dir -mindepth 2 -maxdepth 2 -type d '!' -exec test -e "{}/cover.jpg" ';' -print
Однако это чувствительно к регистру.
Вы не уверены в этом случае, а расширение может быть jPg, png ...
find base_dir -mindepth 2 -maxdepth 2 -type d '!' -exec sh -c 'ls -1 "{}"|egrep -i -q "^cover\.(jpg|png)$"' ';' -print
Другие примеры шаблонов поиска для egrep:
Подставьте часть egrep -i -q "^cover\.(jpg|png)$":
] Для каждой директории необходимо создать оболочку sh, поскольку при использовании find egrep -q "^cover\.(jpg|png)$" невозможно выполнить трубку: совпадения cover.png, cover.jpg, но NOT Cover.jpg ( чувствительность к регистру не отключена). ls -1 "{}" выводит только имена файлов каталога find в настоящее время перемещаютсяДля получения дополнительной информации об этом, проверьте Регулярные выражения.
Это гораздо приятнее решить с помощью globbing, чем с помощью find.
$ cd ... # to the directory one level above the album/artist structure
$ echo */*/*.cover # lists all the covers
$ printf "%s\n" */*/*.cover # lists all the covers, one per line
Теперь предположим, что у вас нет бродячих файлов в этой приятной структуре. Текущий каталог содержит только подкаталоги исполнителя, и они содержат только подкаталоги альбома. Затем мы можем сделать что-то вроде этого:
$ diff <(for x in */*/cover.jpg; do echo "$(dirname "$x")" ; done) <(printf "%s\n" */*)
Синтаксис <(...) - это замена Bash-процесса: он позволяет вам использовать команду вместо аргумента файла. Он позволяет обрабатывать вывод команды в виде файла. Таким образом, мы можем запускать две программы и использовать их diff, не сохраняя их вывод во временных файлах. Программа diff считает, что она работает с двумя файлами, но на самом деле это чтение из двух каналов.
Команда, которая производит правый ввод в diff, printf "%s\n" */*, просто перечисляет альбом каталоги. Левая команда выполняет итерацию по пути *.cover и печатает имена своих каталогов.
Тестирование:
$ find . # let's see what we have here
.
./a
./a/b
./foo
./foo/bar
./foo/baz
./foo/baz/cover.jpg
$ diff <(for x in */*/cover.jpg; do echo "$(dirname "$x")" ; done) <(printf "%s\n" */*)
0a1,2
> a/b
> foo/bar
Aha, каталоги a/b и foo/bar не имеют cover.jpg.
Есть некоторые разбитые угловые случаи , как это по умолчанию * расширяется до самого себя, если оно ничего не соответствует. Это можно решить с помощью Bash set -o nullglob.