如何从终端递归列出隐藏文件

如何从终端递归列出隐藏文件

我想做类似的事情

ls -RA .?* >> LSRA.list

但是使用此命令和我尝试过的一些其他变体,我总是可以获得我所在目录中的所有非隐藏文件。

也就是说,如果目录包含文件

.hiddenfile foo

使用上述命令,我得到了两者的递归列表,但我只想获取以 . 开头的文件和目录的递归列表(但不是 . 目录本身!)

我检查了以下答案这个问题但我没有找到解决问题的方法。

更新:目前发现的最佳选择:

 ls -RA .!(|.)*

 find -path './.*' -name '.*' -empty -printf %P\\n

后者递归列出所有隐藏目录中的所有隐藏文件(因此如果隐藏目录包含非隐藏文件,则不会显示该文件)。

进一步更新。bac0n 和 vanadium 的两个答案都有效:我不能同时接受!(第一个递归显示隐藏目录中的非隐藏文件,后者递归仅显示隐藏文件)

答案1

要以递归方式列出终端中的隐藏文件,可以使用find带有以下-type f选项的工具:

find ~ -type f -name '.*'

这将查找用户主目录中所有以点开头的文件,即隐藏文件或文件夹。删除-type f以列出隐藏文件和文件夹,或指定type d仅列出隐藏目录。通过替换~为有效路径名来指定任何其他目录。指定.列出当前工作目录及以下目录中的隐藏文件。

答案2

匹配每一个极端情况可能比较困难:

find \( -path './.*' -type d -empty -printf %P/\\n \) -o -type f -path './.*' -printf %P\\n

答案3

这是一个不处理任何命令参数的函数,它不会在没有隐藏文件的目录上抛出错误,在列出的目录上附加 /,并输出到单个列。


lsa () {

    # Exit codes with/without argument are 0 if no hidden files present
    EXIT=$(ls -1d .!(|.) |& grep -q "No such file"; echo $?)
    EXIT_ARG=$(cd $1; ls -1d .!(|.) |& grep -q "No such file"; echo $?)

    # If no argument
    if [ $# -eq 0 ]; then
        if [ $EXIT -eq 0 ]; then
            printf ""
        else
            ls -1dp .!(|.)
        fi
    
    # If argument
    else
        if [ $EXIT_ARG -eq 0 ]; then
            printf ""
        else
            (cd $1; ls -1dp .!(|.))
        fi
    fi
}

答案4

请运行以下命令,以递归方式列出任何位置(位置可以在以下命令上更改)的隐藏项目并抑制错误以仅显示预期结果。

#列出 Linux 中隐藏的每种类型的文件/文件夹/数据/对象...

sudo find / -iname '.*' 2> /dev/null|nl   

#在 Linux 中递归列出隐藏文件

sudo find / -type f -iname '.*' 2> /dev/null|nl

#在 Linux 中递归列出隐藏目录

sudo find / -type d -iname '.*' 2> /dev/null|nl 

相关内容