если найти ext тогда cp родительский каталог иначе echo не найден

если найти ext тогда cp родительский каталог иначе echo не найден

Пока что я придумал вот что.

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

Связанный контент