フォルダ(folder_A)には10,000個のファイルがあります。 2番目のフォルダ(folder_B)には100,000のサブフォルダが含まれています。一部のサブフォルダは、フォルダAのファイルと同じ名前を持っています。例は次のとおりです。
ls ./folder_A
aaa.txt bbb.txt ccc.txt
ls ./folder_B
aaa/ bbb/ ddd/ xxx/
フォルダ_Bに同じ名前のサブフォルダがある場合は、フォルダ_Aからファイルを削除する必要があります。フォルダ_Aには、次のようにフォルダ_Bにない名前のファイルのみが含まれます。
ls folder_A
ccc.txt
Bashでこれを行う方法はありますか?ありがとう
答え1
Folder_Aのファイルを繰り返して、各ファイルに対してそのディレクトリがFolder_Bに存在することを確認できます。パラメータ拡張を使用すると、.txt拡張子とパスを削除できます。
for f in folder_A/*.txt ; do
d=${f%.txt} # Remove .txt at the end.
d=folder_B/${d##*/} # Remove everything before the last /.
if [[ -d $d ]] ; then
rm "$f"
fi
done