Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用于以摘要和详细模式打印修改后的文件的Bash脚本?_Linux_Bash - Fatal编程技术网

Linux 用于以摘要和详细模式打印修改后的文件的Bash脚本?

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

这是我到现在为止的密码。我使用“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 | 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 {} +