簡體   English   中英

Shell Scripting:打印具有特定內容的目錄名稱和文件

[英]Shell Scripting: Print directory names and files with specifics

在我的腳本中,我要求用戶輸入一個目錄,然后列出該特定目錄中的所有文件。 我想要做的就是使顯示更好一點,如果目錄中的項目是另一個目錄,並且它是一個可執行文件(不是可執行目錄),我將能夠顯示“/”,打印**“。

這就是我所擁有的:

echo “Directory: “
read thing
for var123 in $thing*
do
        echo $var123
done

在一個目錄中,我有一些文件夾和一些具有執行權限的腳本。 當我運行腳本時我想說

/文件夾1 / subfolder1 /

/文件夾1 / subfolder2 /

/資料夾/文件1 *

/資料夾/文件2 *

我是新手,不知道我在做什么。 任何幫助將不勝感激。

ls -F是你的朋友 - 如果你想為當前目錄做這件事:

ls -F

如果要對當前目錄的所有文件和子文件夾執行此操作:

find * -exec ls -Fd {} \;

......並且對於給定目錄:

echo "Directory: "
read DIR

find $DIR/* -exec ls -Fd {} \;

編輯: ls -F將附加一個/到目錄和一個*到可執行文件。 如果您想要** ,只需使用sed替換它們:

find $DIR/* -exec ls -Fd {} \; | sed 's/\*$/&&/'

這種方法適用於所有 shell,而不僅僅是bash。

您可能需要檢查並確保用戶輸入以/ first結尾的內容。

例如

[[ $thing =~ '/'$ ]] || thing="$thing/"

還要檢查它是否存在

例如

[[ -d $thing ]] || exit 1

然后檢查它是否是目錄使用上面的-d test。 檢查可執行文件是否使用-x 所以把它們放在一起,試試:

#!/bin/bash
echo “Directory: “
read thing
[[ $thing =~ '/'$ ]] || thing="$thing/"
[[ -d $thing ]] || exit 1
for var123 in "$thing"*
do
  if [[ -f $var123 && -x $var123 ]]; then 
    echo "$var123**"
  elif [[ -d $var123 ]]; then 
    echo "$var123/"
  else
    echo "$var123"
 fi
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM