1

До сих пор я придумал это.

if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
        echo 1
else
        echo 0
fi

Но я хотел бы скопировать родительский каталог найденного файла в другое место.

У меня есть ощущение, что я должен просто использовать команду поиска.

2 ответа2

1

Используйте dirname FILE чтобы получить имя каталога данного файла. Так, например:

find DIRECTORY -name "*.mkv" -exec dirname {} \;

Даст вам все каталоги с MKV под DIRECTORY. Затем вы можете передать их через uniq чтобы не получить дубликаты, а затем в случае копирования.

Например

cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR
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/ . Обратите внимание, что косая черта обязательна, потому что в противном случае цель всегда будет перезаписываться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .