我使用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)&pclose
。如果路径是作为输入从外部输入的(想象一下一个淘气的用户将foo; rm -rf $HOME
作为文件名输入)。你应该读code injection。