当前位置: 技术问答>linux和unix
unix下,怎么去查找一个目录下的一个文件(模糊查询,取得符合条件的第一个文件名字)?
来源: 互联网 发布时间:2015-11-06
本文导语: findfirst是用来查找windows下的目录吧? 例如查找 c:\test目录下的*test.txt文件. | vector GetListDir(const RString& sDir,const RString& sFit)//得到匹配的带路径文件名列表,不饱含子目录 { ...
findfirst是用来查找windows下的目录吧?
例如查找 c:\test目录下的*test.txt文件.
例如查找 c:\test目录下的*test.txt文件.
|
vector GetListDir(const RString& sDir,const RString& sFit)//得到匹配的带路径文件名列表,不饱含子目录
{
vector vFilePath;
#ifdef _WIN32
RString strDir;
strDir = sDir ^ sFit;
CFileFind finder;
BOOL bWorking = finder.FindFile(strDir);
if(!bWorking)
{
return vFilePath;
}
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
continue;
else if (finder.IsDirectory())
{
continue;
}
else
vFilePath.push_back(finder.GetFilePath().GetBuffer(0));
}
#else
DIR* dp;
struct dirent *dirp;
dp=opendir(sDir);
if(dp)
{
while((dirp=readdir(dp))!=NULL)
{
if(fnmatch(sFit,dirp->d_name,FNM_PATHNAME)==0)
{
vFilePath.push_back(sDir ^ dirp->d_name);
}
}
closedir(dp);
}
#endif
return vFilePath;
}
这是我写的一个函数,你可能用得上
{
vector vFilePath;
#ifdef _WIN32
RString strDir;
strDir = sDir ^ sFit;
CFileFind finder;
BOOL bWorking = finder.FindFile(strDir);
if(!bWorking)
{
return vFilePath;
}
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
continue;
else if (finder.IsDirectory())
{
continue;
}
else
vFilePath.push_back(finder.GetFilePath().GetBuffer(0));
}
#else
DIR* dp;
struct dirent *dirp;
dp=opendir(sDir);
if(dp)
{
while((dirp=readdir(dp))!=NULL)
{
if(fnmatch(sFit,dirp->d_name,FNM_PATHNAME)==0)
{
vFilePath.push_back(sDir ^ dirp->d_name);
}
}
closedir(dp);
}
#endif
return vFilePath;
}
这是我写的一个函数,你可能用得上
|
另,^是我定义的一个运算
#ifdef _WIN32
const char PATH_SEP = '\';
#else
const char PATH_SEP = '/';
#endif
RString AFX_EXT_API operator ^(const RString& sDir,const RString& sFile) //拼接两个路径,即中间加SEP
{
if(sDir.empty() || *(sDir.rbegin()) != PATH_SEP)
return sDir + PATH_SEP + sFile;
else
return sDir + sFile;
}
RString 可以看成是string
上面那个函数在windows及linux,unix下都可以用,不过要定义宏那它们分开。
#ifdef _WIN32
const char PATH_SEP = '\';
#else
const char PATH_SEP = '/';
#endif
RString AFX_EXT_API operator ^(const RString& sDir,const RString& sFile) //拼接两个路径,即中间加SEP
{
if(sDir.empty() || *(sDir.rbegin()) != PATH_SEP)
return sDir + PATH_SEP + sFile;
else
return sDir + sFile;
}
RString 可以看成是string
上面那个函数在windows及linux,unix下都可以用,不过要定义宏那它们分开。
|
问一下ls的时候是否可以满足你的要求?
$ ls *test.txt | echo $1
$ ls *test.txt | echo $1
|
opendir()
closedir()
readdir()
scandir()
得到文件名后去匹配
closedir()
readdir()
scandir()
得到文件名后去匹配
|
find 目录 |grep ""
|
find 目录 -name '文件名'
例如:
find ./ -name 'test*' //*表示模糊匹配
例如:
find ./ -name 'test*' //*表示模糊匹配