我想做类似的事情
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