bashスクリプトの異なるディレクトリにある2つの基本ファイル名の比較

bashスクリプトの異なるディレクトリにある2つの基本ファイル名の比較

2つのファイルディレクトリをパラメータとして使用するbashスクリプトを作成しようとしています。次に、最初のディレクトリのすべてのファイルを繰り返して、2番目のディレクトリにそのファイルがあることを確認します。同じデフォルト名を持つファイルが存在しない場合、ファイルは削除されます。今これが私が持っているものですが、どんな理由であるかすべて一致すると思うので何もしなくなります。

echo "$directory1"
echo "$directory2"
for f1 in "$directory1/*"
do
    echo $f1
    match=no
    for f2 in "$directory2/*"
    do
        echo $f2
        name1="$(basename "$f1")"
        name2="$(basename "$f2")"
        if [ "$name1" == "$name2" ]
        then
            match=yes
            break
        fi
    done
    echo "$match"
    if [[ "$match" == no ]]
    then
        rm "$f2"
    fi
done

ベストアンサー1

以下は、findを使用して各ディレクトリとベース名のファイルを一覧表示し、並べ替えて並べ替える方法です。次に、各リストをcommに入力し、2番目のディレクトリではなく最初のディレクトリにあるファイルのみを印刷します。リストが期待どおりに表示されたら、rmにパイプできます。

comm -2 -3  <(find "$directory1" -maxdepth 1 -type f | xargs -n1 -d\\n basename | sort) <(find "$directory2" -maxdepth 1 -type f | xargs -n1 -d\\n basename | sort)  | xargs -d\\n printf "$directory1/%s\n" | xargs -d\\n rm

注:@LeviUzodikeが指摘したように、2番目のディレクトリにはない最初のディレクトリのファイルを削除しようとしているので、適切に変更しました。また、デフォルト名に-aパラメーターを使用しません。

おすすめ記事