Просмотр каталогов, сравнение дерева, удаление файлов, отсутствующих только с одной стороны

Если вы запустите

(cd my_utility_version_dir && exec./my_util "$OLDPWD/my_data_file")

затем

  1. my_utilтекущий рабочий каталог(.)будетmy_utility_version_dir
  2. Ему будет предоставлен путь к my_data_fileв предыдущем рабочем каталоге -, из которого вы cdудалили.

Ищет ли он его там или нет, зависит от того, как именно my_utilработает внутри, но довольно часто он принимает путь для использования.

1
03.01.2020, 03:50
1 ответ

Вам не нужно использовать grepили sed. Суть процесса можно показать для одного каталога вот так:

#!/bin/bash
for op in /out/*.mp3
do
    mp="${mp##/out/}"       # Strip /out/ base prefix leaving relative pathname
    fp="${mf%.mp3}.flac"    # Convert mp3 name to flac
    [[ ! -f "/in/$fp" ]] && echo rm "$op"
done

Поскольку это необходимо для дерева каталогов, вам нужно применить это к каждому каталогу по очереди:

find /out -type f -name '*.mp3' -exec bash -c '
    for mp in "$0" "$@";
    do
        mp="${mp#/out/}";
        fp="${mf%.mp3}.flac";
        [[ ! -f "/in/$fp" ]] && echo rm "$op";
    done
' {} +

Если ваш findне поддерживает -exec... +, замените +на ';'. В обоих случаях удалите echo, когда будете уверены, что он удалит нужные файлы.

1
27.01.2020, 23:40

Теги

Похожие вопросы