繁体   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