在我的脚本中,我要求用户输入一个目录,然后列出该特定目录中的所有文件。我想要做的就是使显示更好一点,如果目录中的项目是另一个目录,并且它是一个可执行文件(不是可执行目录),我将能够显示“/”,打印**“。
这就是我所拥有的:
echo “Directory: “
read thing
for var123 in $thing*
do
echo $var123
done
在一个目录中,我有一些文件夹和一些具有执行权限的脚本。当我运行脚本时我想说
/ folder1中/ subfolder1 /
/ folder1中/ subfolder2 /
/ folder1 / file1 *
/ folder1中/ file2的*
我是新手,并不知道我在做什么。任何帮助将不胜感激。
答案 0 :(得分:1)
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。
答案 1 :(得分:1)
您可能需要检查并确保用户首先输入以/
结尾的内容。
e.g。
[[ $thing =~ '/'$ ]] || thing="$thing/"
同时检查是否存在
e.g。
[[ -d $thing ]] || exit 1
然后检查它是否是目录,使用上面的-d
测试。检查可执行文件是否使用-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