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