如何使用绝对路径列出目录中的所有文件

如何使用绝对路径列出目录中的所有文件

我需要一个文件(最好是 .list 文件),其中包含目录中每个文件的绝对路径。

示例 dir1: file1.txt file2.txt file3.txt

listOfFiles.list:

/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt

我怎样才能在 linux/mac 中完成这个任务?

答案1

您可以使用查找。假设您只需要常规文件,您可以执行以下操作:

find /path/to/dir -type f > listOfFiles.list

如果您需要其他类型的文件,可以适当调整类型参数。

答案2

ls -d "$PWD"/* > listOfFiles.list

答案3

请注意,在:

ls -d "$PWD"/* > listOfFiles.list

它是计算目录中(非隐藏)文件列表并将列表传递给ls.ls只需在此处打印该列表,因此您也可以这样做:

printf '%s\n' "$PWD"/* > listOfFiles.list

请注意,它不包括隐藏文件,包括任何类型的文件(包括目录),如果目录中没有非隐藏文件,在 Bourne/POSIX/rc 类 shell 中,您将得到/current/wd/*输出。此外,由于换行符与文件路径中的任何字符一样有效,因此如果您使用换行符分隔文件路径,则将无法使用该结果文件可靠地返回到文件列表。

使用zshshell,你可以这样做:

print -rNC1 $PWD/*(ND-.) > listOfFiles.list

在哪里:

  • -rC1在柱上打印raw 1 C
  • -N,输出记录以 NUL 分隔而不是换行符分隔(行),因为 NUL 是唯一在文件名中找不到的字符。
  • N: 如果没有匹配的文件则展开为空 ( nullglob)
  • D: 包含隐藏文件 ( dotglob)。
  • -.: 仅包括常规的.符号链接解析 ( ) 后的文件 ( ) -

然后,您就可以执行以下操作:

xargs -0 rm -f -- < listOfFiles.list

例如,删除这些文件。

您还可以在 glob 限定符中使用修饰符来获取从 glob 扩展的文件上:P的等效项(获取免除任何符号链接组件的完整路径):realpath()

print -rNC1 -- *(ND-.:P) > listOfFiles.list

答案4

另一种方式tree,这里没有提到,它是递归的,与 find 或 ls 不同,你没有任何错误(如:Permission deniedNot a directory),如果你想将文件提供给xargs或其他命令,你还可以获得绝对路径

tree -fai /pathYouWantToList >listOfFiles.list

选项含义:

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       `.').  In no event does tree print the file system constructs `.'  (current  directory)  and  `..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.

安装tree

sudo apt install tree在 Ubuntu/Debian 上

sudo yum install tree在 CentOS/Fedora 上

sudo zypper install tree在 OpenSUSE 上

相关内容