我正在使用以下命令并收到错误“arg list too long”。需要帮助。
find ./* \
-prune \
-name "*.dat" \
-type f \
-cmin +60 \
-exec basename {} \;
答案 0 :(得分:2)
这是修复
find . -prune -name "*.dat" -type f -cmin +60 |xargs -i basename {} \;
答案 1 :(得分:2)
要仅查找当前目录中的文件,请使用-maxdepth 1
。
find . -maxdepth 1 -name '*.dat' -type f -cmin +60 -exec basename {} \;
答案 2 :(得分:1)
在所有* nix系统中,shell具有可传递给命令的最大参数长度。这是在shell扩展了在命令行上作为参数传递的文件名之后测量的。
find的语法是find location_to_find_from arguments....
。因此,当您运行此命令时,shell会将./*
扩展为当前目录中所有文件的列表。这会将您的查找命令行扩展为find file1 file2 file3 etc etc
这可能不是您想要的,因为无论如何,查找都是递归的。我希望你在一个大目录中运行这个命令并且超出你的命令长度限制。
尝试按以下步骤运行命令
find . -name "*.dat" -type f -cmin +60 -exec basename {} \;
这样可以防止可能导致问题的文件名扩展。
答案 3 :(得分:0)
如果您必须在 ./ 树中仅显示 .dat 文件名。不使用-prune
选项执行它,只使用路径:
find ./ -name "*.dat" -type f -cmin +60 -exec basename {} \;
要查找当前目录中超过60分钟的所有 .dat 文件,请执行以下操作:
find . -iregex "./[^/]+\.dat" -type f -cmin +60 -exec basename {} \;
如果你有croppen(例如aix)版本的find工具,请执行以下操作:
find . -name "*.dat" -type f -cmin +60 | grep "^./[^/]\+dat" | sed "s/^.\///"
答案 4 :(得分:0)
没有查找,只检查当前目录
now=$(date +%s)
for file in *.dat; do
if (( $now - $(stat -c %Y "$file") > 3600 )); then
echo "$file"
fi
done
这适用于我的GNU系统。您可能需要更改不同操作系统的日期和统计信息格式