1

我正在尝试编写一个显示文件内容的简单 bash 脚本。

#!/bin/bash

echo 'Input the path of a file or directory...'
read File

if [ -e $File ] && [ -f $File ] && [ -r $File ]
    then
    echo 'Displaying the contents of the file '$File
    cat $File


elif [ -d $File ] && [ -r $File ]
then
echo 'Displaying the contents of the directory '$File       
    for FILE in `ls -R $File`
        do
               cd $File/$FILE
               echo 'Displaying the contents of the file '$FILE
               cat $FILE
        done

else 
echo 'Oops... Cannot read file or directory !'
fi

用户应输入文件或目录路径。如果用户输入一个文件,程序会用 cat 显示它。如果用户输入一个目录,它应该显示所有文件的内容,包括子目录中的文件。程序的那部分运行得不是很好。我想得到一个不显示错误的结果,例如“没有这样的文件或目录”,而只显示文件的内容。你能帮助我吗 ?提前致谢。

4

3 回答 3

6

ls -R是在所有子目录中查找所有文件的错误工具。 find是一个更好的选择:

echo "displaying all files under $File"
find "$File" -type f -printf "Displaying contents of %p\n" -exec cat {} \;
于 2013-10-28T16:41:28.720 回答
3

您可以打印当前目录中的所有文件

for f in * do
    cat $f;
done
于 2013-10-28T16:41:12.983 回答
2

find 命令将为您节省大量逻辑:

#!/bin/bash 

echo 'Input the path of a file or directory...'
read File
DirName="."

if  echo $File | grep '/' ;  then
  DirName=$(dirname $File)
  File=$(basename $File)
fi

find "$DirName" -type f -name "$File" -exec cat {} \;
find "$DirName" -type d -name "$File" -exec ls {} 

第一个查找将查找所有“常规”(-type f)文件名 $File 并将它们分类第二个查找将查找所有“目录”(-type d)并列出它们。

如果他们没有找到,那么 -exec 部分将不会执行。如果那里有斜线,grep 将分割路径。

于 2013-10-28T16:43:58.023 回答