bash:递归列出所有文件的问题

时间:2010-04-14 03:49:01

标签: bash

  

运行所有的递归列表   / var / log和redirect中的文件   标准输出到一个名为的文件   您的主目录中的lsout.txt。   完成这个问题而不离开   你的主目录。

     

An:ls -R / var / log />   /home/bqiu/lsout.txt

我认为上面的bash命令不正确。因为我发现它存储的是:

$ ls -R /var/log
/var/log:
empty.txt  setup.log  setup.log.full  tmp

/var/log/tmp:
fake.txt subfolder

/var/log/tmp/subfolder:

这是否意味着解决了问题?

我估计不是。

因为它包含的“东西”比“仅文件”

更多

或者至少,如果目的是找到“/ var / log”目录下的所有“文件” 递归地,我希望得到这样的anwser:

/var/log/empty.txt  
/var/log/setup.log  
/var/log/setup.log.full
/var/log/tmp/fake.txt

那么有人可以解析输出的内容供以后使用。如此

$ perl -wnle 'print "$. :" , $_;' logfiles
1 :/var/log/empty.txt
2 :/var/log/setup.log
3 :/var/log/setup.log.full
4 :/var/log/tmp/fake.txt

这是我到目前为止所得到的:

$ ls -1R
.:
cal.sh
cokemachine.sh
dir
sort
test.sh

./dir:
afile.txt
file
subdir

./dir/subdir:

$ ls -R | sed s/^.*://g

cal.sh
cokemachine.sh
dir
sort
test.sh


afile.txt
file
subdir

但是这仍然留下所有目录/子目录名(dir和subdir),再加上几个空的换行符

如何在不使用Perl或awk的情况下获得正确的结果?最好只使用基本的bash命令(这只是因为Perl和awk超出了评估范围)

编辑:我专注于我自己的“$ HOME”文件夹,只是为了限制列出的文件。我家乡的内容很少

编辑第二:抱歉我的初始表格中的未经批准的问题。我修改了措辞,希望现在每个人都能看到问题。

3 个答案:

答案 0 :(得分:4)

尝试 -

find / var / log> 〜/ lsout.txt

答案 1 :(得分:4)

如果您无法使用或不能使用哪些命令ls -R /var/log >~/lsout.txtfind /var/log -print >"$HOME/lsout.txt"或任何类似的组合都可以正常使用。

但是,如果作业的目的是写一个100%sh的实施,而不使用ls -Rfind等,那么你应该按照以下方式制作一些东西:

#!/bin/sh

# Helper method which recursively lists the contents of a given directory
# Usage: recurse_ls target_directory
recurse_ls()
{
  TARGET_DIR="$1"
  # list contents of $TARGET_DIR
  ...
  # - recursive call to list contents of sub-directories
  recurse_ls ...
  ...
}



# MAIN
# Usage: script.sh target_directory
# - check that parameters to script.sh are correct
...
# - list the contents of target_dir and its subdirectories
recurse_ls "$1"

有用的链接:

答案 2 :(得分:1)

我猜他们想要的答案是: ls -R /var/log/ > /home/bqiu/lsout.txt
即。你说的原始答案是错误的。

除了你可能想把它写成: ls -R /var/log/ > ~/lsout.txt
这样它就会输出到登录的主目录,而不仅仅是用户“bqiu”。

当它说:Run a recursive listing of all the files
ls代表listing-R选项代表recursive
所以对我来说,问题的措辞建议使用ls -R来制作列表,

但这取决于他们希望列表的格式。