我在 unix 中收到错误"arg list too long"



我正在使用以下命令并获取错误" arg list" long'.help需要。

find ./*  
  -prune         
  -name "*.dat"  
  -type f        
  -cmin +60      
  -exec basename {} ;

这是修复

find . -prune -name "*.dat"  -type f -cmin +60 |xargs -i basename {} ;

仅在当前目录中查找文件,使用 -maxdepth 1

find . -maxdepth 1 -name '*.dat' -type f -cmin +60 -exec basename {} ;

在所有 *nix系统中,Shell具有可以传递给命令的最大参数。这是在Shell扩展了作为命令行上的参数传递的文件名之后测量的。

查找的语法是 find location_to_find_from arguments....。因此,当您运行此命令时,Shell将使您的./*扩展到当前目录中所有文件的列表。这将使您的查找命令行扩展到find file1 file2 file3 etc etc,这可能不希望您想要,因为发现仍然是递归。我希望您正在以大型目录运行此命令并吹出命令长度限制。

尝试按下以下命令

find . -name "*.dat" -type f -cmin +60 -exec basename {} ;

这将防止可能导致您的问题的文件名扩展。

没有找到,只检查当前目录

now=$(date +%s)
for file in *.dat; do
    if (( $now - $(stat -c %Y "$file") > 3600 )); then
        echo "$file"
    fi
done

这在我的GNU系统上起作用。您可能需要更改不同OS的

的日期和统计格式

如果您必须仅在 ./ tree中显示 .dat fileName。无需-prune选项执行它,然后使用路径:

find ./ -name "*.dat" -type f -cmin +60 -exec basename {} ;

查找所有 .dat 文件,这些文件在当前目录中只有60分钟的时间仅如下:

find . -iregex "./[^/]+.dat" -type f -cmin +60 -exec basename {} ;

,如果您有croppen(例如AIX)查找工具的版本如下:

find . -name "*.dat" -type f -cmin +60 | grep "^./[^/]+dat" | sed "s/^.///"

相关内容

  • 没有找到相关文章

最新更新