【问题标题】:How to filter hidden files after calling MATLAB's dir function调用MATLAB的dir函数后如何过滤隐藏文件
【发布时间】:2011-03-08 15:14:54
【问题描述】:

使用 MATLAB,我需要从目录中提取一组“有效”文件。有效,我的意思是它们不能是目录,也不能是隐藏文件。过滤掉目录很容易,因为dir 返回的结构有一个名为isDir 的字段。但是,我还需要过滤掉 MacOSX Windows 可能放在目录中的隐藏文件。最简单的跨平台方法是什么?我真的不明白隐藏文件是如何工作的。

【问题讨论】:

  • 不是 Matlab 专家,但这就是隐藏文件的工作方式:在 Mac OS X(和其他 Unix 系统)上,它们的名称以句点 (.) 开头。在 Windows 上,它们的“隐藏”属性已设置。 Windows 隐藏文件仅隐藏在 Windows 文件系统上,即 FAT 或 NTFS。

标签: matlab filesystems hidden-files


【解决方案1】:

您可以结合DIRFILEATTRIB 来检查隐藏文件。

folder = uigetdir('please choose directory');
fileList = dir(folder);

%# remove all folders
isBadFile = cat(1,fileList.isdir); %# all directories are bad

%# loop to identify hidden files 
for iFile = find(~isBadFile)' %'# loop only non-dirs
   %# on OSX, hidden files start with a dot
   isBadFile(iFile) = strcmp(fileList(iFile).name(1),'.');
   if ~isBadFile(iFile) && ispc
   %# check for hidden Windows files - only works on Windows
   [~,stats] = fileattrib(fullfile(folder,fileList(iFile).name));
   if stats.hidden
      isBadFile(iFile) = true;
   end
   end
end

%# remove bad files
fileList(isBadFile) = [];

【讨论】:

  • @gnovice:感谢您的修复。啊,复制粘贴忘记,我存在的祸根!
  • 出于好奇,[~,out] = something() 语法在我使用的某些更高版本上是否合法?我通常将~ 称为trash - 但它仍然可以完成任务。
  • @John Berryman:是的,如果我没记错的话,这自 2008 年以来一直是合法的。 ~ 将输出分配给任何内容。
  • 前两个条目可能不是 .和 .. - 例如,如果您有一个以 # 开头的 Emacs 临时文件,该文件将首先出现。
  • @Brian:感谢您的提醒。
【解决方案2】:

假设所有隐藏文件都以“.”开头。这是删除它们的快捷方式:

s = dir(target); % 'target' is the investigated directory

%remove hidden files
s = s(arrayfun(@(x) ~strcmp(x.name(1),'.'),s))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2020-11-15
    • 1970-01-01
    • 2019-03-03
    • 2017-01-06
    • 1970-01-01
    • 2017-01-07
    相关资源
    最近更新 更多