如果解析 的输出ls
很危险,因为它可能会中断一些时髦的字符(空格、\n
、 ... ),那么了解目录中文件数量的最佳方法是什么?
我通常依靠find
避免这种解析,但同样地,find mydir | wc -l
由于相同的原因会中断。
我现在正在 Solaris 上工作,但我正在寻找一个在不同的 unice 和不同的 shell 中尽可能可移植的答案。
我发现这会引发“参数太长”错误:
ls *.*
Run Code Online (Sandbox Code Playgroud)
这不会提高它:
for file in *.*
do
echo $file
done
Run Code Online (Sandbox Code Playgroud)
为什么?
我尝试通过脚本组织我的文件和文件夹。它使用我的文件的第一个字母创建文件夹并将其移动到那里。
第一次,脚本完成这项工作,但如果我创建新文件并再次执行脚本,它会在文件夹中创建一个新的子文件夹,依此类推。
例如,它创建T/T/toto.txt
.
我的脚本:
for first in $(ls -1 | sed 's/^\(.\).*$/\1/' | tr '[a-z0-9]' '[A-Z0-9]' | uniq)
do
mkdir tmp
mv "$first"* tmp/
lower=$(echo $first | tr '[A-Z]' '[a-z]')
mv "$lower"* tmp/
mv tmp/ "$first";
done
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下命令填充文件夹中 .fits 文件的所有名称:
ls *.fits > output_all.txt
Run Code Online (Sandbox Code Playgroud)
文件夹中 .fits 文件的数量 >330k,我收到错误消息
bash: /usr/bin/ls: Argument list too long
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
或者,也可以完全避免创建该文件output_all.txt
。我只需要它告诉STILTS工具使用此命令将哪些 .fits 文件合并到大型 .fits 文件中
stilts tcat in=@output_all.txt out=table_stilts.fits icmd='keepcols "FLUX LOGLAM"'
Run Code Online (Sandbox Code Playgroud)
如果您知道一种方法告诉 STILTS 接受目录而不是文件作为输入,它将解决我的问题ls
。总氮
我有两个目录,每个目录都有几千个文件,我试图从文件中 grep 某些 IP。我的 grep 字符串是:
grep "IP" cdr/173/07/cdr_2018_07*
Run Code Online (Sandbox Code Playgroud)
此 grep 字符串返回“grep:参数列表太长”。但是,当我执行以下操作时:
grep "IP" cdr/173/06/cdr_2018_06*
Run Code Online (Sandbox Code Playgroud)
它返回我正在寻找的东西。
下面是每个这些的父目录的 ls -l 。似乎差异大约是 400KB,所以我不确定大小是否真的是这里的问题。我错过了什么吗?
jeblin@debian:~$ ls -l cdr/173
total 18500
REDACTED
drwxr-xr-x 2 jeblin jeblin 2781184 Jul 2 09:34 06
drwxr-xr-x 2 jeblin jeblin 2826240 Aug 1 07:33 07
Run Code Online (Sandbox Code Playgroud)
如果它有所不同,我编写了一个 Python 脚本来自动执行此过程(搜索多个 IP),它适用于 06,但不适用于 07,这就是我尝试首先进行手动 grep 搜索的原因。