如何使用深度级别2或maxdepth作为下面的bash脚本的输出文本文件

时间:2016-08-05 02:07:12

标签: linux bash unix

我现在使用下面的bash脚本在每个2级深度目录中创建文件列表,并在每个特定文件夹中作为文本文件输出。

但是,我只能将其命名为" File.txt" 如何使用2级深度目录作为输出文本文件名

e.g。列出/ users / bin /中的文件时,输出文件应命名为" bin.txt"

这是我正在使用的代码。

#!/bin/bash

    while IFS= read -r -d '' folder; do 

    echo $folder find "$folder" -type f > "$folder"/File.txt 

    done < <(find . -maxdepth 2 -mindepth 2 -type d -print0) 

1 个答案:

答案 0 :(得分:0)

您必须考虑当前工作目录中的(1)文件(除了'.'之外没有路径组件),以及(2)2级目录中的其余文件。例如,如果要将当前目录中的文件列表输出到pwd.txt,将级别2目录中的每个文件输出到具有相应目录名称的文件(例如./dir1/file_a.txtdir1.txt }),你可以在你的循环体中做类似于以下的事情:

tmp="${folder%/*}"                        ## remove filename
lvl2name="${tmp##*/}"                     ## remove leading path components
[[ $lvl2name = '.' ]] && lvl2name="pwd"   ## handle files in pwd to pwd.txt
echo $folder find "$folder" -type f >> "$lvl2name.txt"

在每次后续运行脚本之前,您需要截断任何现有的"$lvl2name.txt"文件。在输入文件循环之前,您可以先调用find . -maxdepth 2 -type d ...以获取目录名称或类似内容。

尝试一下,如果您有疑问,请告诉我。