验证文件是否已创建shell

时间:2015-03-19 18:59:46

标签: linux bash file shell directory

我必须编写一个shell脚本来监视命令中给出的一些文件夹,并在其中创建某个文件时给出一条消息(文件名将从键盘中读取)。

有谁能告诉我为什么这不起作用?

#!/bin/sh
f=`read filename`
isIn=0
for dir in $*
do
    if [ ! -d $dir ]
    then
        echo $dir is not a directory.
    fi
    for i in `find $dir -type f`
    do
        if [ $f=$i ]
        then
            echo The file $f already exists.
            isIn=1
            break
        fi
    done
    if [ $isIn -eq 0 ]
    then
        sleep 20
        isIn=0
        for i in `find $dir -type f`
        do
            if [ $f=$i ]
            then
                echo The file was created\!
                isIn=1
                break
            fi
        done
    fi
    if [ $isIn -eq 0 ]
    then
        echo The file was not created\!
    fi
done

我使用的想法是我从目录中获取所有文件并验证文件是否已经存在。 如果是 - 显示消息并移动到下一个目录。 如果没有,那么我等着#39;如果在我等待创建某个文件的时候,它会出现在所有文件的列表中,我会检查它。

我的问题是无论我从键盘上读取什么文件,我都会得到消息"该文件已经存在。"没有告诉我文件的名称。

1 个答案:

答案 0 :(得分:0)

  1. f=`read filename`替换为正确的使用read fread -p filename: f
  2. find $dir -type f打印完整的文件名,包括目录路径。由于您只需要基本名称,因此请替换两行

        for i in `find $dir -type f`
    

        for i in `find $dir -type f -printf '%f\n'`
    
  3. [ ]中的每个运算符和操作数必须是单独的参数。因此,替换两行

            if [ $f=$i ]
    

            if [ "$f" = $i ]