我应该编写一个 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
分隔数据。