Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >bash:./script.sh:参数列表太长

bash:./script.sh:参数列表太长
EN

Stack Overflow用户
提问于 2015-02-27 15:39:27
回答 2查看 1.1K关注 0票数 0

我有下面的脚本,我使用./checkres.sh *或甚至*.jpg从图像目录中运行它,但它只有在文件数量较少时才有效,少于100个左右。任何更多,它停止错误“参数列表太长”和我有100,000的图像要处理。

我在网上找了几个小时,尝试了几十种不同的改变,使用while而不是for循环,以及对变量的各种其他改变,但似乎都不起作用。

有没有人能帮我解开这个谜团,因为我刚开始使用bash脚本,并且已经没有想法了。

代码语言:javascript
代码运行次数:0
复制
#!/bin/bash
for img in "$@"
do

export height=`identify -format %h "$img"`
export width=`identify -format %w "$img"`
let ratio=$width/$height

echo Image "$img" = [ $width x $height ] = $ratio

if [ $ratio == 0 ]
then
    echo Portrait 0
    convert "$img" -geometry 600x800 -format jpeg -quality 80 "$img"
else
    echo Landscape 1
    convert "$img" -geometry 800x600 -format jpeg -quality 80 "$img"
fi
EN

回答 2

Stack Overflow用户

发布于 2015-02-27 15:42:31

您不需要更改脚本的任何内容;只需更改调用它的方式:

代码语言:javascript
代码运行次数:0
复制
find . -maxdepth 1 -name '*.jpg' -exec ./checkres.sh '{}' +

这将只在每次调用中放入合适的文件名,并根据需要多次运行脚本。

事实上,除非更改调用约定,否则不能通过更改脚本的任何内容来修复此bug,因为问题是在shell尝试启动它时发生的!

但是,还有另一种变通办法--您可以将其定义为shell函数(在~/.bashrc或类似的脚本中),而不是将其定义为外部脚本,这意味着它不需要作为外部命令启动,这意味着所讨论的操作系统限制不适用。

代码语言:javascript
代码运行次数:0
复制
checkres() {
  for img; do
    ...
  done
}
checkres *.jpg

...is完全在外壳中执行,模拟对命令行长度的任何限制,在执行过程中可以将其传递给外部命令。

票数 3
EN

Stack Overflow用户

发布于 2015-02-27 16:02:37

如果你想接受一个目录参数:

代码语言:javascript
代码运行次数:0
复制
for img in "$1"/*; do

正确引用这种方式将确保您的代码可以处理包含空格的目录名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28768811

复制
相关文章
数据结构和算法——插入排序
插入排序的工作方式是:维护已排序的子列表,一一提取主列表中的项目,然后将其插入子列表中,直到所有项目都从主列表移到子列表中为止。
Lemon黄
2019/11/24
4180
数据结构003:有效的数独
根据题目的规则,数独需要满足三个规则,针对规则一和二可知,我们在遍历每个元素的时候,需要判断该元素所在行和列中是否出现过,即可判断该元素是否满足规则一和二,因此我们可以针对每一行、每一列出现元素的次数作为校验标准,例如声明两个二维数组row[9][9] 和col[9][9] 分别代表行和列上面0-9 出现的次数。例如row[1][2] 表示第1行中,出现2的次数,col[4][3] 表示第4列出现3的次数(都是从第0行/列开始算的)。对于数独数组第i 行j 列上的数值n=board[i][j] ,首先将row[i][n] 上对应的值加一,再将col[j][n] 也加一,然后判断row[i][n] 和row[i][n] 的值是否大于1,大于1则表明i 行或者j 列数字n 出现的次数大于1,即不唯一。不满足规则一或者二。
艰默
2022/12/11
7770
数据结构003:有效的数独
数据结构003:有效的数独
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
艰默
2022/12/12
4200
数据结构003:有效的数独
插入和删除时的有效平均案例群体恢复
作者:Frank Ban,Xi Chen,Rocco A. Servedio,Sandip Sinha
罗大琦
2019/07/18
6560
插入和删除时的有效平均案例群体恢复
Go 数据结构和算法篇(五):插入排序
插入排序的原理是:我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。
学院君
2023/03/03
2470
Go 数据结构和算法篇(五):插入排序
数据结构 插入排序算法
插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。
Meng小羽
2019/12/22
4620
数据结构:插入类型排序的总结(考研)
插入类排序包括直接插入排序,折半插入排序以及希尔排序。 插入排序默认第一个位置(下标为0)的元素是有序的,需要将在[2…n-1]这个区间中剩下的n-1个元素在有序的位置区间寻找一个合适的位置进行插入。
lexingsen
2022/02/24
1850
C++ 数据结构和算法入门笔记
世界上的所有事物都可以看做是对象,二对于每个对象,抽想起来均可以分为两个要素,属性和行为。
独元殇
2023/03/14
1.6K0
PHP数据结构-插入类排序:简单插入、希尔排序
总算进入我们的排序相关算法的学习了。相信不管是系统学习过的还是没有系统学习过算法的朋友都会听说过许多非常出名的排序算法,当然,我们今天入门的内容并不是直接先从最常见的那个算法说起,而是按照一定的规则一个一个的介绍。
硬核项目经理
2021/06/10
9170
PHP数据结构-插入类排序:简单插入、希尔排序
MySQL 插入、更新、删除、简单检索
插入的时候 后面括号的数据和前面要插入的字段数量和类型必须是一致的。 如果是字符型 得用 '' 或者""引起来。
宁在春
2022/10/31
9250
MySQL 插入、更新、删除、简单检索
数据结构005:有效的字母异位词
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
艰默
2023/02/26
2900
数据结构005:有效的字母异位词
数据结构散列线性开型寻址(C++实现)插入,删除,查找
插入x,若散列表已存在x,输出“Existed”,否则插入x到散列表中,输出所在的下标。 查询x,若散列表不含有x,输出“-1”,否则输出x对应下标。 删除x,若散列表不含有x,输出“Not Found”,否则输出删除x过程中移动元素的个数。 输入格式 第一行两个整数D(1≤\leq≤ D ≤\leq≤ 3000)和m(1≤\leq≤ m ≤\leq≤ 3000),其中D为散列函数的除数,m为操作数。 接下来的m行,每行两个整数opt和x,分别代表操作类型和操作数。 若opt为0,则代表向散列表中插入x; 若opt为1,代表查询散列表中x是否存在; 若opt为2,(如果散列表中含有x),删除x。 数据保证散列表不会溢出。 输出格式
种花家的奋斗兔
2020/11/13
9520
数据结构:程序加图示分析单链表的插入和删除操作
下图展示了单链表的基本结构: head指针是链表的头指针,指向第一个节点,每个节点的next指针域指向下一个节点,最后一个节点的next指针域为NULL,在图中用0表示。 下面先来看程序(栈的链式存储
s1mba
2018/01/03
1.3K0
数据结构:程序加图示分析单链表的插入和删除操作
golang数据结构之插入排序
//InsertSort 插入排序 func InsertSort(arr *[7]int) { for i := 1; i < len(arr); i++ { insertVal := (*arr)[i] inserIndex := i - 1 for inserIndex >= 0 && (*arr)[inserIndex] > insertVal { (*arr)[inserIndex+1] = (*arr)[inserI
西西嘛呦
2020/08/26
2510
《数据结构与算法_插入排序》
代码实现: package com.datastruct.sort; import java.util.Arrays; /** * 插入排序Java实现 * @author Administrator * */ public class InsertSort { public static void insertSort(int [] array) { for(int i = 1;i<array.length;i++) {
梅花
2020/09/28
2190
数据结构——优先队列(C++和Java实现)
十几天没有更新自己的博客了,因为目前在算法和数据结构的学习中,碰到了一些问题,例如之前就在优先队列,堆这个数据结构面前,感觉到有点吃不透概念,而使用的那本书上写的实在太抽象了,所以又查找了很多资料,最终对优先队列这个数据结构有了一定的了解。花了点时间才啃下来的知识,当然要把它记录下来了,所以今天就来回顾一下优先队列。
Originalee
2018/08/30
5680
MySQL(二)数据的检索和过滤
使用频率最高的SQL语句应该就是select语句了,它的用途就是从一个或多个表中检索信息,使用select检索表数据必须给出至少两条信息:想选择什么,以及从什么地方选择
allsmallpig
2021/02/25
4.1K0
数据结构-单链表的读取,插入与删除
链表定义: struct ListNode { int value; ListNode *next; }; 单链表读取 在顺序存储结构中,比如数组中,想要获取某一个位置的数据是非常容易的一件事
chaibubble
2018/01/02
1.1K0
数据结构-单链表的读取,插入与删除
【数据结构】队列(C++)
设立一个队头指针front,一个队尾指针rear,分别指向队头元素和队尾元素,rear-front为元素个数。
半生瓜的blog
2023/05/13
5370
【数据结构】队列(C++)
浅谈C++ 数据结构
C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
C语言与CPP编程
2020/12/02
7780

相似问题

Windows内核内存保护

22

Windows、Emacs、Git Bash和shell命令

34

Windows 7上的Emacs构建过程

10

OSX/Bash -检测构建失败

30

如何在Windows 10 Bash上使用X Windows和Emacs?

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文