列出目录中的文件,而不在该目录中列出子目录及其内容
我想创建一个目录中所有文件的列表,而不列出驻留在同一目录中的任何子目录,并将该列表打印到新文件。
ls -d * > filelist
将创建当前目录中所有文件的列表,但它还列出当前目录中的子目录。 我使用-maxdepth 1
选项尝试了find
命令 – 但是,输出格式是一个问题,因为find还会打印出路径以及文件名。
如果有人可以告诉我可能使用另一个命令或选项将产生目录中文件的输出列表而不是子目录或其内容的名称,我将不胜感激。
基于查找的解决方案:
find . -maxdepth 1 -type f -printf '%f\n'
基于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
基于bash的解决方案将为您提供不是目录的所有内容; 它将包括命名管道之类的东西(你可能想要这个)。 如果您只想要文件 ,请使用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
如果你要定期使用它,你当然可以将它放在~/.bashrc
某个别名中:
alias lsfiles='for f in *; do [[ -f "$f" ]] && ls -- "$f"; done'
由于您在评论中注意到您实际上是在OSX而不是Ubuntu,我建议您下次将问题提交给Apple或更常见的Unix和Linux Stack Exchange站点。
仅列出文件名:
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 ^-
包含符号链接:
ls -al | grep ^[-l]
如果列表的第一个字符描述文件的类型,那么-
表示它是常规文件,符号链接是l
。
于Debian / Ubuntu
打印所有匹配文件的名称(包括链接):
run-parts --list --regex . .
绝对路径:
run-parts --list --regex . $PWD
打印/etc
中以p
开头并以d
结尾的所有文件的名称:
run-parts --list --regex '^p.*d$' /etc
还有另一个解决方案,一个对我有用的天真短小的解决方案:
ls -la | grep -E '^[^d]' > files
我建议使用find,如果需要,只需从输出中删除目录名称:
find . -type f -maxdepth 1 | sed s,^./,,
ls -1 --file-type | grep -v '/' | sed s/@$// > filelist
另一种可能的选择是
ls -F | grep -v '/' | sed /[@*]$// > filelist
--file-type
在文件夹的末尾放置一个/(在符号链接的末尾也放置一个@ The grep -v '/'
删除子目录(因为它们现在以’/’结尾)。 sed s/@$//
删除@。-1每行打印一个文件,以便grep -v正常工作。