# obtain a multi-line string of all filenames
filenames="$(find . -type f | sort -V)"
# read the multi-line string into a bash array
IFS=$'\n' read -r -d '' -a filenames_array <<< "$filenames"
# Now, the the variable `filenames_array` is a bash array which contains the list
# of all files! Each filename is a separate element in the array.
8条答案
按热度按时间yftpprvb1#
如果您需要
test.log
、test2.log
和file2
,则:如果您不需要
file2
,则:mbskvtky2#
如果您还需要列出符号链接、管道、设备文件和文件系统的其他特定元素,则应用途:
这将列出除目录以外的所有内容。
f4t66c6m3#
使用find很简单:
eulz3vhy4#
find
仅限常规文件搭配
find
使用-type f
选项,* 仅 * 寻找一般档案。或者,若要包含更多档案类型,请使用-not -type d
寻找 * 除 * 目录以外的所有档案类型。在列出所有文件时,我还喜欢按照
sort -V
的管道对它们进行排序,如下所示:从
man find
开始:-type c
文件的类型为
c
:b
-块(缓冲)特殊c
-特殊字符(无缓冲)d
-目录p
-命名管道(FIFO)f
-常规文件l
-符号链接;如果-L
选项或-follow
选项有效,则不会出现这种情况,除非符号链接已断开。如果要在-L
有效时搜索符号链接,请使用-xtype
。s
-插槽D
-门(Solaris)要一次搜索多个类型,可以提供由逗号
,
(GNU扩展名)分隔的类型字母的组合列表。如何将
find
(多行字符串文件列表)的输出存储到bash数组中为了更进一步,下面介绍**如何将所有文件名存储到一个名为
filenames_array
**的bash索引数组中,以便您可以轻松地将它们传递给另一个命令:现在,您可以将整个文件名数组传递给另一个命令(例如
echo
),方法是使用"${filenames_array[@]}"
一次获取数组中的所有元素,如下所示:或者,您可以像这样逐一查看数组中的每个元素:
示例输出:
参考文献:
1.我想起了the main answer by @John Kugelman here中的
find . -type f
。1.我借用了我自己的答案中的部分,将多行字符串读入bash数组:How to read a multi-line string into a regular bash "indexed" array
ppcbkaq55#
iq3niunx6#
ekqde3dh7#
每个文件都在自己的行上。您必须在要搜索的目录中。
lawou6xi8#
还有一个选择
列出所有文件,而
列出所有目录