我在一个文件夹 (folder_A) 中有 10k 个文件。第二个文件夹 (folder_B) 包含 100k 子文件夹。某些子文件夹与文件夹 A 中的文件具有相同的名称。以下是示例:
ls ./folder_A
aaa.txt bbb.txt ccc.txt
ls ./folder_B
aaa/ bbb/ ddd/ xxx/
当folder_B中存在同名子文件夹时,我需要从folder_A中删除文件,以便folder_A将仅包含名称不存在于folder_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