相关疑难解决方法(0)

为什么循环查找的输出是不好的做法?

这个问题的灵感来自

为什么使用 shell 循环处理文本被认为是不好的做法?

我看到这些结构

for file in `find . -type f -name ...`; do smth with ${file}; done
Run Code Online (Sandbox Code Playgroud)

for dir in $(find . -type d -name ...); do smth with ${dir}; done
Run Code Online (Sandbox Code Playgroud)

几乎每天都在这里使用,即使有些人花时间对这些帖子发表评论,解释为什么应该避免这种东西......
看到此类帖子的数量(以及有时这些评论被简单地忽略的事实)我想我还不如问一个问题:

为什么循环find的输出是不好的做法,为 返回的每个文件名/路径运行一个或多个命令的正确方法是find什么?

find filenames files for

193
推荐指数
4
解决办法
3万
查看次数

使用命令行,将列中的所有条目乘以固定数字,但前提是该行不是注释

我在尝试着:

  1. 始终添加0 0 0到文件的第一行。
  2. 2*pi6.2832乘以三列文件的第一列,其格式类似于下面,但前提是该行以数字开头。第二列和第三列保持原样。
  3. *如果行不以数字开头,则在行首附加a(除非它已经是 ) *。即只是注释掉当前行,除非它已经被注释掉了。

这是一个示例输入文件:

* radius, section, index
1.12 A 0
2.0 A 1
   * There is white space before this comment
* This is a comment indicating a new section
5 B 0
3.17 B 1
7.3 B 7
This row starts with an alphabet char and should be commented out by the script.
0 C 1
1 C 2
Run Code Online (Sandbox Code Playgroud)

这是预期的输出:

0 0 0
* radius, …
Run Code Online (Sandbox Code Playgroud)

command-line text-processing

4
推荐指数
2
解决办法
355
查看次数

带有基本名称的 find -exec 命令选项

我有以下 JPEG 文件:

$ ls -l
-rw-r--r-- 1 user group 384065 janv. 21 12:10 CamScanner 01-10-2022 14.54.jpg
-rw-r--r-- 1 user group 200892 janv. 10 14:55 CamScanner 01-10-2022 14.55.jpg
-rw-r--r-- 1 user group 283821 janv. 21 12:10 CamScanner 01-10-2022 14.56.jpg
Run Code Online (Sandbox Code Playgroud)

我用来$ img2pdf将每个图像转换为 PDF 文件。要做到这一点 :

$ find . -type f -name "*.jpg" -exec img2pdf "{}" --output $(basename {} .jpg).pdf \;
Run Code Online (Sandbox Code Playgroud)

结果 :

$ ls -l *.pdf
-rw-r--r-- 1 user group 385060 janv. 21 13:06 CamScanner 01-10-2022 14.54.jpg.pdf
-rw-r--r-- 1 …
Run Code Online (Sandbox Code Playgroud)

find options basename

3
推荐指数
1
解决办法
1101
查看次数

为什么 for 循环不需要显式指定循环变量的值集?

我从https://unix.stackexchange.com/a/175845/674读取命令

为什么可以

$ bash -c 'for f do echo "$f";done' bash a b c
a
b
c
Run Code Online (Sandbox Code Playgroud)

输出与

$ bash -c 'for f in "$@"; do echo "$f";done' bash a b c
a
b
c
Run Code Online (Sandbox Code Playgroud)

?

为什么 for 循环不需要明确指定

  • 循环变量的值集,如in "$@"

  • ; ?

谢谢。

bash

2
推荐指数
1
解决办法
603
查看次数

标签 统计

find ×2

basename ×1

bash ×1

command-line ×1

filenames ×1

files ×1

for ×1

options ×1

text-processing ×1