我必须编写一个shell脚本,它将目录名称作为参数,然后将目录中文件的名称和大小列入文本文件。我对linux知之甚少,所以能帮帮我吗?
我设法写的就是:
for entry in "$search_dir"/*
do
if [ -f "$entry" ];then
echo "$entry"
fi
done
输出文件应如下所示:
filename1 filesize1
filename2 filesize2
我在将目录名称作为参数
时遇到问题答案 0 :(得分:2)
您可以使用>
轻松将脚本输出放入文件中例如
ls /tmp > ./contentsOfDir.txt
会将ls命令转储到当前目录的contentsOfDir.txt中。
对于bash shell,脚本看起来像这样:
#!/bin/bash
ls -l $1 > contentsOfDir.txt
并被称为
./myScript dirNameToBeDumpedInFile
查看this bash scripting tutorial,它涵盖了基础知识。
答案 1 :(得分:2)
如果要打印文件夹内容的漂亮树及其子文件夹,可以使用“树”。
如果系统上没有安装,您需要先执行此操作:
sudo apt-get install tree
然后语法非常简单。如果要将输出保存到文件:
tree -h -A path/to/dir > output.txt
-A
用于确保输出使用ASCII字符。-h
将以人类可读的格式打印每个文件大小。您可以使用“--help”选项限制输出的更多选项:
> tree --help
-a All files are listed.
-d List directories only.
-l Follow symbolic links like directories.
-f Print the full path prefix for each file.
-L level Descend only level directories deep.
-o filename Output to file instead of stdout.
-s Print the size in bytes of each file.
-h Print the size in a more human readable way.
--dirsfirst List directories before files (-U disables).
答案 2 :(得分:1)
#! /bin/bash
if [ $# -gt 0 ] ; then
ls $1 > textfile.txt
else
echo "Please provide Foldername";
fi
另外你可以检查$ 1是否是一个文件夹,但这应该足够了
答案 3 :(得分:0)
#!/bin/sh
if [ ! -d "$1" ]; then
echo "usage: $0 <directory>";
exit 1;
fi
cd $1;
find -maxdepth 1 -type f -print0 | xargs -0 -n1 du -h;
cd -;
这将输出如下内容:
4.0K ./bundle.h
24K ./walker.o
4.4M ./git-show
4.0K ./sha1-lookup.h
100K ./refs.o