Linux Shell脚本:将目录的内容列入文件

时间:2011-03-23 16:20:26

标签: linux

我必须编写一个shell脚本,它将目录名称作为参数,然后将目录中文件的名称和大小列入文本文件。我对linux知之甚少,所以能帮帮我吗?

我设法写的就是:

for entry in "$search_dir"/* 
do
  if [ -f "$entry" ];then
    echo "$entry"
  fi
done

输出文件应如下所示:

filename1 filesize1
filename2 filesize2

我在将目录名称作为参数

时遇到问题

4 个答案:

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