回显目录中每个文件的名称和行数

回显目录中每个文件的名称和行数

我应该编写一个 shell 脚本,向其中发送一个代表目录的命令行参数。然后我应该回显该目录中每个文件的所有文件名和行数。我还应该只对时间不超过 10 分钟的前 10 个文件执行此操作。

find "$1" -cmin -10 -type f | head -10 

这是我尝试查找更新时间超过 10 分钟的文件的方法,但出现了一些错误。而且我也不知道如何获得这些名字。预先感谢您的所有帮助。

我的文件名是免费的。我得到的错误是,当将我的主目录作为参数传递时,权限被拒绝。所以我没有得到名单。我应该获取文件名列表和每个文件的行数。

当我/bin/bash ss1 /home/ivana在终端中输入时,出现以下错误:

find: '/home/ivana/.cache/dconf': Permission denied

我正在使用Linux。

答案1

好的,首先要做的事情。您得到的错误无关紧要,它只是意味着/home/ivana/.cache/dconf您的特定子目录 ( )$HOME不属于您。这几乎肯定会发生,因为您使用sudo.简单的修复方法是:

sudo chown -R ivana /home/ivana/

这会将您后面的所有文件和目录的所有权更改$HOME为您自己的用户名。如果您可以拥有其他用户正确拥有的内容,则只需更改目录的所有权即可dconf

sudo chown -R ivana /home/ivana/.cache/dconf

现在,也就是说,正确执行此操作并处理任意文件名的方法是:

find "$1" -cmin -10 -type f -print0 | head -z -n 10 

这将导致find打印使用尾随\0而不是换行符找到的每个文件,这确保它可以处理名称包含换行符的文件。选项-z使其head读取\0分隔输入。

下一步是读取每个文件并打印它们的行数:

find "$1" -cmin -10 -type f -print0 | head -z -n 10 |
    while IFS= read -r -d '' file; do wc -l "$file"; done

IFS=输入字段分隔符设置为空,使-r不进行特殊read处理\(因此\t不会成为制表符)并-d ''告诉read读取\0分隔数据。

相关内容