我正在尝试编写一个显示文件内容的简单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显示该文件。如果用户输入目录,则应显示所有文件的内容,包括子目录中的文件。该程序的那部分不能很好地工作。我想得到一个结果,不会显示错误,如'没有这样的文件或目录',但只显示文件的内容。你能帮助我吗 ? 提前致谢。
答案 0 :(得分:6)
ls -R
是查找所有子目录中所有文件的错误工具。 find
是一个更好的选择:
echo "displaying all files under $File"
find "$File" -type f -printf "Displaying contents of %p\n" -exec cat {} \;
答案 1 :(得分:3)
您可以打印当前目录中的所有文件
for f in * do
cat $f;
done
答案 2 :(得分: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将拆分路径,因为那里有一个斜杠。