【问题标题】:linux find command output traversinglinux find 命令输出遍历
【发布时间】:2012-10-28 08:02:34
【问题描述】:

我需要创建一个 shell 脚本,它只会在特定源(例如 /var/www/html/folder1/source/)下查找文件(例如 *.jpg),并且必须对返回的输出进行一些操作查找命令。以下是我在脚本中编写的命令

outputvar = find /var/www/html/folder1/source/ -name \*.jpg

如何对存储 find 命令输出的变量进行遍历操作?

【问题讨论】:

  • 你想对每个这样的文件做什么操作?
  • 我需要压缩每个文件夹的所有文件,然后必须删除这些文件
  • 你能有包含空格的文件名吗?或者您确定没有*.jpg 文件名有空格,例如没有photo\ of\ flower.jpg ??
  • 是的,可能有空格或任何特殊字符...在这种情况下,我不知道如何在压缩时处理此类文件。
  • 我稍微改进了我的答案(关于文件名中的空格),但你真的应该阅读更多关于 Unix 脚本的材料。

标签: linux command find traversal output


【解决方案1】:

您可能希望将find 命令的输出放在一个文件中,例如

find /var/www/html/folder1/source/ -name \*.jpg > /tmp/find.out

您也可以将该输出放入 shell 变量中,例如

outfindvar=$(find /var/www/html/folder1/source/ -name \*.jpg)

然后你可以迭代它们

for jpgfile in $outfindvar; do 
   ## do something with $jpgfile
done

如果您的文件名中有空格,请小心。在这种情况下,考虑使用find-print0 操作;或者为-exec 操作使用辅助脚本。

你真的应该阅读Advanced Bash Scripting Guide

你可能想用

开始你的脚本
#!/bin/bash -vx

在调试它时,一旦你的脚本运行良好,删除-vx

【讨论】:

  • 感谢您的回答,但我的问题是如何遍历上面示例中使用的“outfindvar”?
  • 我运行了上面的代码,但出现错误“/var/www/html/folder1/source: is a directory”。请建议
  • 您是否开始阅读高级 Bash 脚本指南 或其他一些好的材料?它比我们能更好地解释事情。我感觉您不了解有关 shell 和 Linux 命令的一些基础知识。另请阅读find(1) 的文档,例如与man find
  • 好的,我会先阅读那篇文章,看看是否能找到解决方案....谢谢你的帮助
【解决方案2】:

piping 的输出怎么样?你想用它做什么?

find /var/www/html/folder1/source/ -name \*.jpg | other_command

【讨论】:

  • 管道似乎很有用,但我无法理解在我的情况下我将如何遍历我的示例的“outputvar”。您能否提供更多详细信息
  • 输出的是一系列字符串(文件路径),如果other_command(可以是任意复杂的链)可以读取stdin,就会对每个字符串进行操作,我假设是您所说的“遍历”是什么意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
相关资源
最近更新 更多