使用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版本進行一些測試(您會收到嗎?)。 現在,正如我所看到的,它默認情況下使用簽名的程序包,它使我更有信心潛水。

        我父親還告訴我,他將給我寄送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很棒🙂

  9.   賈澤科 他說:

    一言以蔽之……很棒!
    很長一段時間以來,我一直在完善一個腳本以從Internet下載,但是我面臨的問題是下載我要求1的文件,然後又無法驗證1ro的存在。
    很好的兔兔。

  10.   祖蘭 他說:

    感謝智利的巨大貢獻。
    每天LINUX都會讓我感到驚喜,
    萬歲免費軟件MIERDAAAA。

  11.   大衛 他說:

    為...服務
    檢查文件是否來自目錄

  12.   格羅夫 他說:

    如果我想檢查路徑«/ tmp / receivers»中是否存在任何文件,請執行任何命令,結果如何?

    我將非常感激

    問候

  13.   約翰 他說:

    親愛的,並通過IF確定文件是否已完全填充???。 我問這是因為,當您填充文件進行傳輸時,即使只有一半的數據,它也可以接收它。

    問候和感謝您的答复。

  14.   犬風 他說:

    好吧,我想您還應該添加一個示例,例如“檢查是否沒有”,“文件”或“目錄”

    檢查它是否不存在,例如,使用變量->

    目錄

    #!/斌/慶典
    目錄=»$ HOME /測試目錄»
    文件=»$ HOME /測試文件»

    如果[! -d“ $目錄”]; 然後
    迴聲“沒有$目錄”
    迴聲“創建->“ $目錄”
    mkdir“ $目錄”
    其他
    echo“目錄” $目錄“已存在
    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 [desdelinux [dot] net]),我們將很樂意為您提供幫助

      1.    朱利奧·維納奇(Julio Vinachi) 他說:

        非常感謝kzkggaara非常感謝。

  16.   納塔利婭 他說:

    嗨,我對計算了解不多,也不知道這篇文章是否與我遇到的問題有關。

    如果您讀了我,我也會發表評論,即使該帖子來自一年前:
    事實證明,我在桌面上創建了一個文件夾來存儲一些視頻。 好吧,我刪除了這些視頻,因為我不再需要它們了,現在這個文件夾告訴我它不存在(即使它在我的桌面上可見)。

    -這是我的第一個問題:
    我無法刪除該文件夾。

    -第二個問題,我認為更重要:
    為了刪除該文件夾,我放置了一個PHOTOS文件夾。 現在,當我打開“不存在”文件夾時,該文件夾為空,並且照片不存在。

    如何恢復照片? 我已經在“顯示隱藏的文檔”文件夾中提供了該選項,但PHOTOS文件夾沒有出現。

    希望您知道如何解決。
    謝謝。

    1.    瓦爾多 他說:

      主要有兩個用戶:root和your_user(例如natalia)。 他們都有個人文件夾。 your_user在/ home中,根目錄在/(根目錄)中。 通過右鍵單擊該文件夾,可以查看它屬於誰。 如果您的文件管理器使用sudo或gksu或kdesu作為根目錄,具體取決於您使用的環境,請轉到根目錄-> root->桌面,您可能會找到照片,然後可以刪除該文件夾。 當您不是文件或目錄的所有者並且沒有訪問權限時,某些發行版會告訴您目錄/文件不存在。 如果您是所有者,並且您不是root用戶,請使用sudo等操作文件管理器,然後轉到根目錄-> / home-> personal_folder->桌面,查看照片是否在那里以及是否可以刪除文件夾。
      如果這不起作用,則您將不得不從終端(控制台)上看到其他選項。

  17.   佩德羅·曼努埃爾·阿瓜約·穆尼茲 他說:

    你好,你好嗎?我正在用bash進行工作,我想知道如何驗證是否有鍵盤輸入的目錄,例如

    #!/斌/慶典
    閱讀路線
    #Entry〜/桌面
    #然後我嘗試瀏覽該目錄
    cd $路徑
    #我收到以下bash消息:cd:〜/ Desktop:該文件或目錄不存在

    我的問題是,我該怎麼做才能從鍵盤輸入它並將其作為目錄路徑?

  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.   河岸 他說:

    HOLA,
    這個:
    如果[-w / home / Komun / Logs / ti]; 然後
    找出文件是否可寫。 但這是基於用戶權限的。 是否可以找出該組或其他組是否具有權限?