Пока что я придумал вот что.
if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
echo 1
else
echo 0
fi
Но мне бы хотелось затем скопировать родительский каталог найденного файла в другое место.
У меня такое чувство, что мне просто следует воспользоваться командой find.
решение1
Ответ fede.evol не работает, если пути содержат пробелы. Вывод find
илиls
не следует использовать в подстановке команд.
Правильный способ обработки всех имен файлов (за исключением путей с символами новой строки) будет следующим:
find /somewhere -name "*.mkv" -exec dirname {} \; | uniq | \
while IFS= read -r dir; do echo cp -- "$dir" /other/; done
Таким образом, каждая папка из /somewhere
копируется в /other/
. Обратите внимание, что завершающий слеш обязателен, поскольку в противном случае цель всегда будет перезаписана.
решение2
Используйте dirname FILE
для получения имени каталога указанного файла. Например:
find DIRECTORY -name "*.mkv" -exec dirname {} \;
Даст вам все каталоги с MKV в DIRECTORY. Затем вы можете пропустить их, uniq
чтобы не было дублей, а затем на всякий случай скопировать.
Например
cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR