使用bash,如何在没有解释器抱怨的情况下获取文件夹中的文件数,从shell脚本中排除目录?
在朋友的帮助下,我试过了
$files=$(find ../ -maxdepth 1 -type f | sort -n)
$num=$("ls -l" | "grep ^-" | "wc -l")
Run Code Online (Sandbox Code Playgroud)
从命令行返回:
../1-prefix_blended_fused.jpg: No such file or directory
ls -l : command not found
grep ^-: command not found
wc -l: command not found
Run Code Online (Sandbox Code Playgroud)
分别.这些命令在命令行上运行,但不适用于bash脚本.
如果文件中填充了格式化的图像文件1-pano.jpg
,我想抓取目录中的所有图像,以获得最大编号的文件,以便处理下一个正在处理的图像.
为什么会出现差异?
Pau*_*ce. 39
引号导致错误消息.
要获取目录中的文件计数:
shopt -s nullglob
numfiles=(*)
numfiles=${#numfiles[@]}
Run Code Online (Sandbox Code Playgroud)
它创建一个数组,然后用它的元素数替换它.这将包括文件和目录,但不包括dotfiles或.
or ..
或其他虚线目录.
使用nullglob
这样一个空目录给出的计数为0而不是1.
你可以使用find -type f
或者你可以计算目录并减去:
# continuing from above
numdirs=(*/)
numdirs=${#numdirs[@]}
(( numfiles -= numdirs ))
Run Code Online (Sandbox Code Playgroud)
另请参阅" 如何在目录中找到最新(最新,最早,最旧)的文件? "
您可以在执行块中包含任意数量的空格.它们通常有助于提高可读性.唯一的缺点是它们会使文件变大,并且可能会稍微减慢初始解析(仅).有一些地方必须有空格(例如,围绕[
,[[
和]
,]]
并=
在比较中)和一些必须没有空间(例如=
在任务中.
mck*_*nzm 15
ls -l | grep -v ^d | wc -l
Run Code Online (Sandbox Code Playgroud)
一条线.
Hai*_* Vu 13
怎么样:
count=$(find .. -maxdepth 1 -type f|wc -l)
echo $count
let count=count+1 # Increase by one, for the next file number
echo $count
Run Code Online (Sandbox Code Playgroud)
请注意,此解决方案效率不高:它为find
和wc
命令生成子shell ,但它应该可以工作.
归档时间: |
|
查看次数: |
76291 次 |
最近记录: |