- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在图像压缩工具 jpeg-recompress 上使用带目录排除的 FIND 命令,并使用 xargs 来加速该过程。
命令行是:
find /path/dir -type f -name '*.jpg' -not -path '*/imdb/*' | xargs -P 50 -I {} jpeg-recompress --quality high --min 60 --method smallfry --strip \{} \{} \;
几分钟后发生错误:
xargs: jpeg-recompress: terminated by signal 11
只有在处理由数十万张图像组成的大目录时才会发生这种情况。我已经搜索了与段错误相关的信号 11,但我不太了解它们。我唯一知道的是,大概我正在尝试访问一些我不应该访问的内存。
请帮忙,我不太理解代码,也不明白我做错了什么。
感谢您的帮助。
最佳答案
错误来自jpeg-recompress
不是来自 xargs
: jpeg-recompress
死于 SIGSEGV。段错误通常仅在程序中存在错误时才会发生 - 通常是错误的指针。
我确信这是由于 jpeg-recompress
中的错误所致它由单个轻微损坏的 jpeg 文件触发(或者恰好具有 jpeg-recompress
不期望的格式)。
这也解释了为什么您只能在包含数十万张图片的大目录中看到它:其中一张略有损坏。
识别文件的一种方法是使用 GNU Parallel 的 --joblog
和 --halt
:
find /path/dir -type f -name '*.jpg' -not -path '*/imdb/*' |
parallel --joblog my.log --halt now,fail=1 jpeg-recompress --quality high --min 60 --method smallfry --strip \{} \{}
然后你应该在my.log
的最后一行找到损坏文件的名称。 .
如果您认为可能有更多损坏的文件:
find /path/dir -type f -name '*.jpg' -not -path '*/imdb/*' |
parallel --joblog my.log jpeg-recompress --quality high --min 60 --method smallfry --strip \{} \{}
grep -P '\t11\t' my.log
关于linux - shell 错误 xargs : terminated by signal 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51510777/
据我了解,Linux 中的 xargs 命令可用于获取一个命令的输出并将其作为另一个命令的输入传递。但是,我注意到将 xargs 作为参数传递给自身会执行以前简单的输出,如果它在没有参数的情况下被调用
如何让 xargs 对给定的每一行输入精确执行一次命令?它的默认行为是对行进行分块并执行一次命令,将多行传递给每个实例。 From http://en.wikipedia.org/wiki/Xargs
我正在使用 xargs 尝试回显文件名,后跟其内容。这是命令 find output/ -type f | xargs -I {} sh -c "echo {} ; cat {}" 但是由于某种原因,
xargs 擅长插入初始参数: seq 0 10 | xargs -n 3 echo foo 产生这个输出: foo 0 1 2 foo 3 4 5 foo 6 7 8 foo 9 10 当我还想要尾
为什么 找到 . -名称“*.xml” | xargs grep FOO 返回与文件名的匹配,而 find 。 -名称“*.xml” | xargs -i -sh -c "grep FOO {}" 不
每 xargs --help: -L, --max-lines=MAX-LINES use at most MAX-LINES non-blank input lines per command li
我有以下 3 个命令(每个都包含 xargs 和并行进程),我想将它们一起并行运行。 1. ls filenames_for_bld*_all | xargs -i bash -c 'calculat
我刚发现两个命令之间的区别: echo sum.txt| xargs cat 这会输出sum.txt的内容 echo sum.txt| xargs -0 cat 这显示错误: cat: sum.txt
考虑以下几点: $ echo index.html* | xargs -L 1 ls -l -rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.h
我想做类似的事情: find . -type f | xargs cp dest_dir 但是xargs将dest_dir用作初始参数,而不是最终参数。我想知道: 是否可以为xargs指定最终参数?
zgrep -i XXX XXX | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2 | xargs -0 -I string echo
简而言之,这是我的问题 $ echo 'for i in $@; do echo arg: $i; done; echo DONE' > /tmp/test.sh $ echo "ac\nbc\ncc
我正在尝试将一些 .flac 文件转换为 .mp3,以便将其导入 iTunes。我尝试使用 find、xargs 和 ffmpeg,但 xargs 给我一个未终止的引号错误(因为我的文件名中有引号)。
我正在尝试设置一个脚本,以根据 transmission-remote 的输出自动删除 .torrent 文件。 transmission-remote http://localhost/transm
我想了解Rampion's code中xargs man的使用: screen -t man /bin/sh -c 'xargs man || read' 感谢 Rampion:我们不需要猫! 为什么
我遇到的问题是通配符量词由于某种原因没有通过 xargs 传递给命令。 假设,我们有包含以下内容的文件 file1: -l -a f* 我们需要通过 xargs 将参数传递给 ls。 cat file
我正在尝试处理位于磁盘上许多不同位置的 DVD 文件。它们的共同点是它们(每组输入文件)都位于名为 VIDEO_TS 的目录中。每种情况下的输出都是一个以该目录的父目录命名的文件。 我知道我可以获得每
我有一个 xargs 命令: xargs -a es_doc_positions.txt -P 64 -I {} populate_es_index.py --start {} --end {} 是否
我有一个 C 程序,它通过 i2c 连续读取加速度计数据。每当平板电脑的方向发生变化时,它都会向标准输出输出一个新行。 现在,我希望能够在 bash 脚本中使用该输出来更改屏幕的旋转。 现在,问题是这
我知道我可以使用 xargs 获取文件列表并为每个文件运行一次命令。 我想做的是将文件列表作为单个参数列表传递给命令。例如: ls |尾部-10 输出 a b c d 但我想将它传递给一个命令,它将接
我是一名优秀的程序员,十分优秀!