У меня есть следующее дерево каталогов:

/Directories/
/Directories/somedir/somefile.mkv
/Directories/somefile.rar

Я пытаюсь найти способ удалить файл .rar, если файл .mkv существует и его размер превышает 1 ГБ.

Я использую find -type f -size +1000000k -name "*.mkv" чтобы найти файлы. Затем я предполагаю, что либо -exec или | xargs может помочь с остальными, но я не знаю, как выйти из вывода find, прежде чем передать его в rm . В моем сценарии выводом будет /Directories/somedir/somefile.mkv а команда, переданная в rm будет Directories/*.rar

Могу ли я сделать это с -exec или xargs . Есть ли более элегантное решение?

1 ответ1

1

Я не думаю, что оба условия можно проверить в одной команде find . Вы можете, однако, сделать короткий скрипт, который сделает необходимые проверки и удалить файл, если они удовлетворены.

#!/bin/bash

for file in `find -type f -size +1000000k -name "*.mkv"`; do
  # This would remove the mkv extension
  noext=${file::-4}

  # Parts of directories
  parentdir=`echo $file | cut -d'/' -f2` # This would return 'Directories'

  if [ -e "./$parentdir/$noext.rar" ]; then
     rm -f "./$parentdir/$noext.rar"
  fi
done

Не проверено, но было бы что-то очень похожее на это.

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