[英]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.