Linux 用于以摘要和详细模式打印修改后的文件的Bash脚本?
这是我到现在为止的密码。我使用“find”和mtime重新查找修改过的文件列表Linux 用于以摘要和详细模式打印修改后的文件的Bash脚本?,linux,bash,Linux,Bash,这是我到现在为止的密码。我使用“find”和mtime重新查找修改过的文件列表 baseFile=$1; mtime=$2; outputmode=$3; if [ $outputmode = 1 ] then find $1/ -type f -mtime $2 | ls -lh fi if [ $outputmode = 2 ] then echo $USER find $1/ -type f -mtime $2
baseFile=$1;
mtime=$2;
outputmode=$3;
if [ $outputmode = 1 ]
then
find $1/ -type f -mtime $2 | ls -lh
fi
if [ $outputmode = 2 ]
then
echo $USER
find $1/ -type f -mtime $2 | wc -l
fi
此程序在执行期间接受输入。语法为./filename.sh param1 param2 param3
param1-必须在其中找到已修改文件的目录的路径
param2-mtime参数的值
param3接受2个值
值1输出应如下所示(摘要模式)
值2 out应该是这样的(详细模式)
$1表示参数1,$2表示参数2
摘要和详细模式基于第三个参数,如$3所示
我的代码只是打印修改过的文件和给定目录中的文件总数。
至于详细模式,我的代码只打印目录,但我只需要打印修改过的文件
如果有任何帮助,我们将不胜感激。
ls
从参数列表中获取文件名参数,而不是标准输入。您可以使用xargs
将标准输入转换为参数
find "$baseFile"/ -type f -mtime "$mtime" -print0 | xargs -0 ls -lh
-print0
和-0
选项一起工作,以确保即使文件名有空格(否则将导致它们被视为多个参数),也能正常工作
或者您可以使用-exec
选项:
find "$baseFile"/ -type f -mtime "$mtime" -exec ls -lh {} +
为什么要设置变量
baseFile
和mtime
,然后在脚本中稍后使用$1
和$2
来代替这些变量?正如我在问题中所述,我在编译时接受输入。因此,我将basefile替换为$1,将mtime替换为$2。您可以将其替换为任何变量。很抱歉造成混淆您将参数列表与标准输入混淆。文件名必须是参数。为什么不使用-exec
选项来查找
?我知道。我“我只是想知道为什么你没有写find$baseName/
而不是find$1/
?第一个查找操作是列出所有文件和子目录。第二次查找操作未显示修改的文件数。目的是仅对修改后的文件执行这两项操作。谢谢你的帮助对不起,我误解了这个问题。如果您只想计算更改文件的数量,则您的wc
是正确的。谢谢,但它们都列出了该目录中的所有内容,包括子目录和文件。如何仅对修改后的文件执行此操作?如果不将其传输到ls
,是否会获得正确的文件?您给出的mtime
值是多少?
find "$baseFile"/ -type f -mtime "$mtime" -print0 | xargs -0 ls -lh
find "$baseFile"/ -type f -mtime "$mtime" -exec ls -lh {} +