c - 如何使用 exec 或 execv 运行 find 命令

标签 c linux unix

我正在使用 find . -name "file.txt" | tee -a file_path<.txt>从当前文件夹开始递归搜索“file.txt”。 tee命令是将所有路径保存到在其中找到“file.txt”的目录。它工作得很好,但现在我想用 C 代码实现这个命令。
你能给我一些关于如何用 system() 实现它的帮助吗? , exec() , execv() ,或者您认为更好或更合适的任何其他功能?

我的意思是搜索一个文件 (file1.txt) 并将所有指向它的路径保存在另一个文件 (file2.txt) 中。然后:

open first file -> add/copy text -> close file -> 
open second file -> add/copy text...

我知道如何使用:fopen , fwrite , fread , opendir ,但我无法通过 C 代码设法获取文件路径。

最佳答案

您可能不需要为此运行任何进程。您可能应该使用 nftw(3)相反,函数(它会稍微快一些,并且不需要任何外部命令,如 find)在文件树中搜索 *.txt 文件。

如果你只想扫描一个目录(不是子目录),你可以简单地使用 opendir(3) & readdir(3) (不要忘记 closedir);你可能需要使用类似 snprintf(3) 的东西(或 asprintf(3) )构建路径。

顺便说一句,还有glob(3) & wordexp(3) (& stat(2) & access(2) ...) 这可能是相关的。

如果您有一些 char* str; 包含路径(例如通过 nftw 间接给出),您可以测试它是否以 .txt< 结尾

int slen = strlen(str);
if (slen>4 && !strcmp(str-slen-4, ".txt")) {
  // do something when str ends with ".txt"
}

如果您坚持使用外部 find 命令,请考虑 popen(3) & 关闭。害怕code injection如果路径作为输入来自外部(想象一个调皮的用户输入 foo; rm -rf $HOME 作为文件名)。

你应该阅读 Advanced Linux Programming ....

关于c - 如何使用 exec 或 execv 运行 find 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27797592/

相关文章:

linux - 如何在Linux shell脚本中做这样的事情

linux - 如何将包含路径的变量插入sed

c - Netbeans C 远程调试器反汇编仅查看

c++ - 为 SetWaitableTimer 设置相对时间时的算术溢出

比较十六进制值中的 n 个字符序列

bash - 如何在没有 tail 命令的情况下编写 tail 脚本

C++ 套接字问题

c - 如何获取字符串的 ASCII

C - 结构制造商函数导致不同的错误

c - 是否可以在没有消息循环的情况下运行窗口应用程序