Answers:
ls -d "$PWD"/* > listOfFiles.list
ls -d -1 $PWD/*
-1
选项保证每行获得一个文件名
ls
检测输出是到文件还是终端。
find
答案是一个更好的解决方案,因为无论列出多少文件,它都不会失败。
您可以使用查找。假设只需要常规文件,则可以执行以下操作:
find /path/to/dir -type f > listOfFiles.list
如果需要其他类型的文件,可以适当调整type参数。
ls
。这find
确实会递归子目录,对于非递归,您需要-maxdepth 1
在-type
参数前添加。
注意在:
ls -d "$PWD"/* > listOfFiles.list
它是外壳程序,用于计算目录中(非隐藏)文件的列表并将该列表传递给ls
。ls
只在此处打印该列表,因此您也可以执行以下操作:
printf '%s\n' "$PWD"/*
printf
具有额外的好处,如果您有成千上万个printf
未作为单独进程运行的文件,则不会出现“命令行太长”错误。
printf
不是内置的shell pdksh
及其某些派生版本或Bourne shell的大多数版本。ls -d
与之相比的一个缺点是,如果其中没有未隐藏的文件,它将在打印的/path/to/*
同时ls
显示有关该文件不存在的错误。
另一种方法tree
,这里没有提到,它是递归的,并且与find或ls不同,它没有任何错误(例如:Permission denied
,Not 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上
sudo apt install tree
在OpenSUSE的sudo yum install tree
CentOS 上的Ubuntu 上 sudo zypper install tree
brew install tree
在Mac上
在过去的Linux环境中,我有一条resolve
命令可以标准化路径,包括将相对路径转换为绝对路径。我现在找不到它,所以也许它是由该组织中的某人编写的。
您可以使用Python或Perl标准库(可能还有其他语言)中的函数制作自己的脚本。
resolve.py
:
#!/bin/env python
import sys
import os.path
for path in sys.argv:
print os.path.abspath(path)
resolve.pl
:
#!/bin/env perl
use warnings;
use Cwd qw ( abs_path );
foreach (@ARGV) {
print abs_path($_), "\n";
}
然后,您将使用以下方法解决您的问题:
resolve.py * > listOfFiles.list
使用此命令,您还可以执行以下操作:
cd /root/dir1/dir2/dir3
resolve.py ../../dir4/foo.txt
# prints /root/dir1/dir4/foo.txt