我想创建一个目录中所有文件的列表,而不列出驻留在同一目录中的任何子目录,并将该列表打印到一个新文件中。
ls -d * > filelist
Run Code Online (Sandbox Code Playgroud)
将创建当前目录中所有文件的列表,但它也会列出当前目录中的子目录。我尝试find
使用该-maxdepth 1
选项的命令- 但是,输出格式是一个问题,因为 find 还会打印出路径和文件名。
如果有人可以告诉我可能使用的另一个命令或选项将只生成目录中文件的输出列表,而不是子目录的名称或其内容,我将不胜感激。
evi*_*oup 23
基于查找的解决方案:
find . -maxdepth 1 -type f -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)
基于 Bash 的解决方案:
for f in *; do [[ -d "$f" ]] || echo "$f"; done
## or, if you want coloured output:
for f in *; do [[ -d "$f" ]] || ls -- "$f"; done
Run Code Online (Sandbox Code Playgroud)
基于 bash 的解决方案将为您提供不是目录的所有内容;它将包括命名管道之类的东西(你可能想要这个)。如果您特别想要files,请使用find
命令或以下命令之一:
for f in *; do [[ -f "$f" ]] && echo "$f"; done
## or, if you want coloured output:
for f in *; do [[ -f "$f" ]] && ls -- "$f"; done
Run Code Online (Sandbox Code Playgroud)
如果您打算定期使用它,您当然可以将它放入您的某个地方的别名中~/.bashrc
:
alias lsfiles='for f in *; do [[ -f "$f" ]] && ls -- "$f"; done'
Run Code Online (Sandbox Code Playgroud)
由于您在评论中指出您实际上使用的是 OSX 而不是 Ubuntu,我建议您下次向Apple或更一般的Unix 和 Linux Stack Exchange 站点提出问题。
小智 10
仅列出文件名:
1. ls -p | grep -v /(不带隐藏文件) 2. ls -l | grep ^- | tr -s ' ' | cut -d ' ' -f 9(不带隐藏文件) a) ls -pa | grep -v /(带有隐藏文件) b) ls -la | grep ^- | tr -s ' ' | cut -d ' ' -f(带有隐藏文件)
仅列出目录:
1. ls -p | grep /(无隐藏) 2. ls -l | grep ^d | tr -s ' ' | cut -d ' ' -f 9(不隐藏) a) ls -pa | grep /(隐藏) b) ls -l | grep ^d | tr -s ' ' | cut -d ' ' -f 9(隐藏)
grep -v -e ^$ 是从结果中删除空行。
更多细节:
ls -p 标志是在目录名的末尾放置“/”,-R 标志用于递归搜索,-l 用于列出信息,-a 用于列出所有(包括隐藏文件)和信息,grep -v 标志用于结果反转,-e 标志用于正则表达式匹配。
仅列出常规文件:
ls -al | grep ^-
Run Code Online (Sandbox Code Playgroud)
包括符号链接:
ls -al | grep ^[-l]
Run Code Online (Sandbox Code Playgroud)
其中列表的第一个字符描述了文件的类型,因此-
意味着它是一个常规文件,因为符号链接是l
.
打印所有匹配文件的名称(包括链接):
run-parts --list --regex . .
Run Code Online (Sandbox Code Playgroud)
使用绝对路径:
run-parts --list --regex . $PWD
Run Code Online (Sandbox Code Playgroud)
打印以/etc
开头p
和结尾的所有文件的名称d
:
run-parts --list --regex '^p.*d$' /etc
Run Code Online (Sandbox Code Playgroud)
小智 4
我建议使用 find 并在必要时从输出中删除目录名称:
find . -type f -maxdepth 1 | sed s,^./,,
Run Code Online (Sandbox Code Playgroud)
ls -1 --file-type | grep -v '/' | sed s/@$// > filelist
Run Code Online (Sandbox Code Playgroud)
另一种可能的选择是
ls -F | grep -v '/' | sed /[@*]$// > filelist
Run Code Online (Sandbox Code Playgroud)
在文件夹末尾添加--file-type
一个 /(在符号链接末尾添加一个 @。 The grep -v '/'
删除子目录(因为它们现在以“/”结尾)。删除sed s/@$//
@。-1 每行打印一个文件这样 grep -v 就能正常工作。