使用IF循环检查文件或文件夹是否存在(以及更多)

我什么都没放 ,就是在我进入Python的美好世界时,我已经忘记了另一个对我有很大帮助的朋友

正如标题所示,在这里我向Bash爱好者添加了一些东西……我将向您展示如何使用以下方法检查系统中是否存在文件或文件夹: if

我们将创建一个.sh文件并为其授予执行权限,为此,只需在终端中放置以下命令即可:

触摸test.sh && chmod + x test.sh

这是创建文件(触摸test.sh),还授予您执行权限(chmod + x test.sh)

然后,在其中写入以下内容:

if [ -d /opt/ ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

这是什么

简单😀

第一行-» 如果[-d / opt /];

在这里,我们问/ opt /目录是否存在? 是目录/文件夹,因为 -d 表示目录或文件夹。
然后,如果有的话,我们将在终端«是的,它确实存在。»(这是第2和3行)
否则/ opt /不存在,那么我们将打印«不,它不存在»(第4和5行)
然后在最后一行(数字6)中,关闭if和仅此而已。

相关文章:
在PC和Virtualbox虚拟机之间建立网络连接

做测试,它将显示/ opt /确实存在。

如果要我向您显示其他文本(不存在的文本),请更改/ opt /,以选择系统中不存在的任何其他文件夹,例如:/ asd /

如您所见,-d帮助我们了解目录是否存在,现在,如果我们将-d更改为-f,它将检查文件是否存在(-d =目录,-f =文件/文件)

例如:

if [ -f /etc/hosts ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

以下是选项列表:

-d -»检查某个目录是否存在

-f -»检查某个文件是否存在

-w -»检查某个文件是否具有写权限

-x -»检查某个文件是否具有执行权限。

而且,没有什么可添加的🙂

我知道这对于那些喜欢用Bash编程的人非常有用和有趣。

问候


42条评论,留下您的评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   雨果

    另一种无需... if。then..else的方式:

    test -f /etc/hosts && elcomando

    或者也

    test ! -f /etc/hosts && echo "no se encontró el archivo"

    等等。

    1.    KZKG ^ Gaara

      对😀
      …O_O…你是雨果,古巴的雨果? …使用Windows8,WTF !!!

      1.    雨果

        好吧,是的,我对这个操作系统很熟悉,如果我必须坦率地说,我发现有用的唯一东西就是复制管理器,否则我个人觉得很麻烦,特别是它的混合接口和Metro应用程序。 我不喜欢Vista和7(尽管效率更高),但我也不喜欢。 我使用它的唯一目的就是玩NFS13和Skyrim,但是此OS占用了太多空间,因此我不得不删除Linux分区[snif]。

        但是,为了让您省心,我要提到的是,前天我下载了86月的Arch ISO,并且计划在获得回购协议后立即尝试使用x64-XNUMX版本的Arch ISO(您会拥有它吗?)。 现在,如我所见,它默认情况下使用签名的程序包,它使我有更多的信心去研究。

        我父亲还告诉我,他将给我寄送Sony Xperia,我想用它来学习一些Android编程技巧,这是一个未完成的愿望。 如此冷静,我还没有走到力量的阴暗面,buahahahaha😉

  2.   帕兹

    人测试

    1.    MSX

      当然。

  3.   RAW基本

    Wenas!..

    我们可以做同样的一个....但是目录作为参数传递..

    if [ -d $1 ];
    then
    echo "Sí, sí existe."
    else
    echo "No, no existe"
    fi

    我们称其为:

    ./test.sh / opt /

    问候语

  4.   萨沃

    如果不是周期xD

  5.   格雷戈里奥·埃斯帕达斯(Gregorio Espadas)

    它就像我正在做脚本的手套一样适合我。 使用通配符有效吗? 例如,要查找是否有任何.mp4,然后在其上运行某些内容。

    如果[-f * .mp4];
    ...

    1.    RAW基本

      是的,这是完全有效的..

      即使通过参数..“ * .mp4”

      1.    RAW基本

        例如:

        if [ -f $1 ];
        then
        rm -r $1
        else
        ls
        fi

        如果您调用它:./test.sh * .mp4

        如果找到.mp4文件,则会将其删除... ...但不会列出该目录中的文件...

        1.    格雷戈里奥·埃斯帕达斯(Gregorio Espadas)

          感谢您的反馈和提示! 🙂

        2.    华金

          您错过了f xD

          rm -rf $ 1

          这更令人兴奋!

        3.    b1tblu3

          太好了!!!!,每天我都对Linux产生了更多的爱,Windows降级到了我的硬盘驱动器的某个暗角,该硬盘将被擦除,以取代Linux。

          1.    RAW基本

            太好了....然后下一步..把它拿出来..

            大约6个月前我的所有机器上都只有GNU / Linux,我不需要更多....不是W $ ..或Wine ..而且我很高兴那样..😉

            而且我正在感染周围的环境..因为每个人都可以用我的Arch快速,高效,快乐地看到我..他们要求我安装Linux .. .yeah!..😀

        4.    犬风

          您还可以检查它们的各种扩展名,可以使用类似

          #!/斌/庆典
          目录= $ HOME /下载

          如果[$目录]; 然后
          echo“这是文件类型列表:”
          回声“ mp1,mp2,mp3,mp4,wav,flac,flaad,aud,midi”
          ls {* .mp ?, *。wav,*。fla,*。aud * .midi}
          fi

          使用{}可以在这种情况下使用“?”指定多个扩展名。 ,是通配符,允许您使用“任何字符”。

          希望对您有帮助

        5.    佩德罗

          我建议使用命令find [目录] [search_pattern] –exec [命令] {} \

      2.    卡洛斯

        它不起作用,我将这些文件放在目录中:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #!/斌/庆典
        路径= / tmp /测试
        cd $ ROUTE
        ls -la | awk'{print»«$ 9}'
        如果[[-f AB。文本文件]]; 然后
        echo»如果有AB,请输入IF
        。文本文件 ”
        fi
        如果[-f AB20160422.TXT]; 然后
        回显“特定AB文件的输入”
        fi

        当我把[-f AB.TXT]出现错误
        当我把[[-f AB
        .TXT]]没有给出错误,但找不到文件
        它仅在我放入特定文件时才有效,例如:
        如果[-f AB20160422.TXT]; 然后

        我无法使用通配符*还是?

        1.    佩德罗

          #!/ usr / bin / env bash
          #.编码= utf-8.

          内容

          EXIT_OK = 0
          EXIT_BAD = 66

          粗体=»\ 033 [1m»
          NC =»\ 033 [0m»
          红色=»\ 033 [31m»

          如果[! “ $ 1”];
          然后
          回声“缺少参数”
          退出$ EXIT_BAD
          fi

          cd“ $ 1”

          文件=»ls -h1 $ 1»

          $中的文件($个文件); 做
          echo -e“您可以在这里使用$ BOLD $文件$ nc做任何事情”
          完成

          退出$ EXIT_OK

  6.   MSX

    @KZ,详细介绍一下:“那是因为我正在进入Python的美好世界”!

    1.    KZKG ^ Gaara

      哈哈哈哈...一点一点🙂
      我仍然只是Python的新手,我几乎没有时间花很多时间来学习它,所以我很慢,很慢,但是我在学习中肯定会😀

  7.   奥多班

    非常感谢😀就在昨天,我在想如何做到这一点。

  8.   帝国大厦

    这与ncurses很棒great

  9.   贾泽科

    一言以蔽之……很棒!
    很长一段时间以来,我一直在完善一个脚本以从Internet下载,但是我面临的问题是下载我要求1的文件,然后又无法验证1ro的存在。
    很好的兔兔。

  10.   祖兰

    感谢智利的巨大贡献。
    每天都有更多LINUX使我感到惊喜,
    万岁免费软件MIERDAAAA。

  11.   大卫

    为...服务
    检查文件是否来自目录

  12.   格罗夫

    如果我想检查路径«/ tmp / receivers»中是否存在任何文件,请执行任何命令,结果如何?

    我将非常感激

    问候

  13.   约翰

    亲爱的,并通过IF确定文件是否已完全填充???。 我问这是因为,当您填充文件进行传输时,即使只有一半的数据,它也可以接收它。

    问候和感谢您的回复。

  14.   犬风

    好吧,我想您还应该添加一个示例,例如“检查是否没有”,“文件”或“目录”

    检查它是否不存在,例如,使用变量->

    目录

    #!/斌/庆典
    目录=»$ HOME /测试目录»
    文件=»$ HOME /测试文件»

    如果[! -d“ $目录”]; 然后
    回声“没有$目录”
    回声“创建->“ $目录”
    mkdir“ $目录”
    其他
    echo“ Directory” $目录“已经存在
    fi

    如果[! -d“ $ File”]; 然后
    回声“文件$不存在”
    回声“创建->“ $文件”
    触摸“ $ File”
    其他
    回声“文件” $文件“已经存在
    fi

    1.    嘉京

      当您稍后执行mkdir时,请检查终端是否可以创建它,因为如果它是根或系统文件夹,则它可能会损坏

  15.   朱利奥·维纳奇(Julio Vinachi)

    问候KZKG ^ Gaara一个查询,就像我要使用curl一样。 我想知道如何从控制台ping url以查看其是否可用,例如 http://portal.com/directorio/archivo1.php file1将用于存储访问IP的位置是用于监视团队,我需要每半小时制作一次该图钉,以使我知道公共IP,因为公共IP会不时更改,并且无法通过ssh连接。

    问候预先感谢你,上帝保佑你。

    1.    KZKG ^ Gaara

      你好,

      首先,您必须说(例如)IP变量是该文件的内容,为此,您必须:
      1.下载文件
      2.查看其内容并从那里获取IP
      3. IP是变量

      例如:
      在这里,我们下载文件-»wget http://portal.com/directorio/archivo1.php -o 文件.html
      然后,将其内容分配给变量:-»:$ {IP:=`cat file.html`}
      ..假设该文件的内容仅具有IP,如果没有,则必须使用grep,awk或head。

      一旦将IP作为变量,剩下的就是世界上最简单的事情🙂

      如果您愿意,请通过电子邮件给我写信(kzkggaara[at]desdelinux[dot]net)我很乐意帮助你

      1.    朱利奥·维纳奇(Julio Vinachi)

        非常感谢kzkggaara非常感谢。

  16.   Natalia

    嗨,我对计算了解不多,也不知道这篇文章是否与我遇到的问题有关。

    如果您读了我,我也会发表评论,即使该帖子来自一年前:
    事实证明,我在桌面上创建了一个文件夹来存储一些视频。 好吧,我删除了这些视频,因为我不再需要它们了,现在这个文件夹告诉我它不存在(即使它在我的桌面上可见)。

    -这是我的第一个问题:
    我无法删除该文件夹。

    -第二个问题,我认为更重要:
    为了删除该文件夹,我放置了一个PHOTOS文件夹。 现在,当我打开“不存在”文件夹时,该文件夹为空,并且照片不存在。

    如何恢复照片? 我已经在“显示隐藏的文档”文件夹中提供了该选项,但PHOTOS文件夹没有出现。

    希望您知道如何解决。
    谢谢。

    1.    瓦尔多

      主要有两个用户:root和your_user(例如natalia)。 他们都有个人文件夹。 your_user位于/ home中,根目录位于/(根目录)中。 通过右键单击该文件夹,可以查看它属于谁。 如果您的文件管理器使用sudo或gksu或kdesu作为根目录,具体取决于您使用的环境,请转到根目录-> root->桌面,您可能会找到照片,然后可以删除该文件夹。 当您不是文件或目录的所有者并且您没有访问权限时,一些发行版会告诉您目录/文件不存在。 如果您是所有者,并且您不是root用户,请使用sudo等操作文件管理器,然后转到根目录-> / home-> personal_folder->桌面,查看照片是否在那里以及是否可以删除文件夹。
      如果这不起作用,则您将不得不从终端(控制台)上看到其他选项。

  17.   佩德罗·曼努埃尔·阿瓜约·穆尼兹

    嗨,你好吗?我正在bash上工作,我想知道如何验证是否有键盘输入的目录,例如

    #!/斌/庆典
    阅读路线
    #Enter〜/桌面
    #然后我尝试浏览该目录
    cd $路径
    #我收到以下bash消息:cd:〜/桌面:文件或目录不存在

    我的问题是,我该怎么做才能从键盘输入它并将其作为目录路径?

  18.   米格尔

    我怎么知道一个团体是否存在,

  19.   杂乱无章

    很好,当我按下按钮cunaguaro时,我的canaima中存在问题,它说没有文件或目录,无法解决该问题,其余的都无法打开cunaguaro,请谢谢。

  20.   卡洛斯

    如果文件名中有空格,如何在BASH中执行if?
    例如:
    四月data.xlsx

    询问文件是否存在

    1.    曼努埃尔·阿尔科塞·希门尼斯

      卡洛斯(Carlos),像这样:

      如果[[“” $ variable“ ==数据\ month \ of \ April.xlsx]]; 然后回显“匹配”; 科幻

      您还可以:
      如果[[“ $ variable” =='April.xlsx月份的数据]]; 然后回显“匹配”; 科幻

      另一种选择:
      [[“” $ Variable“ =='April.xlsx的数据]] && echo'matches'|| 回声“不匹配”

      在互联网的某些黑暗区域中,他们建议使用[[]]而不是[],如果要比较数字,则:((variable> = 3))&& echo'变量大于或等于3'| | 回显“变量小于3”

      因此,对于数字:

      如果((数字!= 4)); 然后回显“ $ {number}不是4”; 否则回显“ $ {number}为4”; 科幻

  21.   塞萨尔·马特乌斯(Cesar Mateus)

    如何编写代码以验证目录是否包含特定文本,以便能够对其进行编辑。

    例如:

    如果(text1)

    什么都不做

    其他

    将text1更改为text2

  22.   米格尔

    一个问题,如何每15秒检查一次文件是否存在,谢谢。

  23.   河岸

    你好,
    这个:
    如果[-w / home / Komun / Logs / ti]; 然后
    找出文件是否可写。 但这是基于用户权限的。 是否可以找出该组或其他组是否具有权限?