Linux Bash脚本删除另一个文件夹中的文件(如果存在于扩展名为*.c的两个文件夹中)

Linux Bash脚本删除另一个文件夹中的文件(如果存在于扩展名为*.c的两个文件夹中),linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,编写一个shell脚本,删除一个目录中的所有C源(如果它们位于另一个目录的结构中)。命令行上的第一个参数是C源所在的目录,第二个参数是搜索开始的目录 如果可能的话,我需要完整的代码,因为我已经写了这段代码,但它不能解决我的问题: #!/bin/bash if [ $# -ne 2 ] then echo "for execution complete the line of command: $0 dir1 dir2" exit 1 else

编写一个shell脚本,删除一个目录中的所有C源(如果它们位于另一个目录的结构中)。命令行上的第一个参数是C源所在的目录,第二个参数是搜索开始的目录

如果可能的话,我需要完整的代码,因为我已经写了这段代码,但它不能解决我的问题:

#!/bin/bash
if [ $# -ne 2 ]
then 
        echo "for execution complete the line of command: $0 dir1 dir2"
        exit 1
else 
        if [ ! d ~/$2 ]
        then
        echo "write a directory in order to do the search"
        exit 1
        fi
fi
for fis in *.c
do
        cat $fis
        rm -i $fis
done

以上就是我所尝试的。

首先,您需要获得第二个目录中存在的所有文件的列表。该列表应保存在一个文件中。搜索可按如下方式进行:

find <second_directory> -type f -name *.c >list_of_files.txt
find-type f-name*.c>list\u of_files.txt
然后编写一个循环,遍历第一个目录,并使用
list\u of_files.txt
进行检查,如果文件存在(使用
grep
),则将其删除


当您使用Linux(无回收站)时,我建议将要删除的文件名写入一个临时文件,如果这是正确的,只需在其前面添加一个
rm

那么,您尝试了什么,您在哪里卡住了?一种简单的方法是使用第二个参数运行
find
,将结果限制为文件
“*.c”
,并将其保存为临时文件。然后在第一个目录中的文件上循环,并对临时文件中的文件执行
grep
。如果它与临时文件中的一个文件名匹配,则删除该文件,否则保留该文件。(注意:您必须从这两个文件中修剪文件名的路径部分,以确保您将名称与名称进行比较)请尽快阅读该页面,并访问描述和的链接。提供必要的细节将使这里的每个人都能帮助你回答问题。我如何编写循环?我使用了grep,它说我不应该用它在目录中搜索。