Shell Scripting:打印具有特定内容的目录名称和文件

时间:2014-02-03 03:56:00

标签: linux shell sh

在我的脚本中,我要求用户输入一个目录,然后列出该特定目录中的所有文件。我想要做的就是使显示更好一点,如果目录中的项目是另一个目录,并且它是一个可执行文件(不是可执行目录),我将能够显示“/”,打印**“。

这就是我所拥有的:

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

在一个目录中,我有一些文件夹和一些具有执行权限的脚本。当我运行脚本时我想说

  

/ folder1中/ subfolder1 /

     

/ folder1中/ subfolder2 /

     

/ folder1 / file1 *

     

/ folder1中/ file2的*

我是新手,并不知道我在做什么。任何帮助将不胜感激。

2 个答案:

答案 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