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パラメーターを使用しません。