【问题标题】:Selecting a file from a list [duplicate]从列表中选择文件[重复]
【发布时间】:2020-11-15 21:53:26
【问题描述】:

如何从列表中逐个选择文件并对其进行处理?这是我的代码:

list=$( find $path \( -name "*.c" -or -name "*.cpp" -or -name "*.cxx" -or -name "*.cc" \) )
for file in "$list"
do
done

【问题讨论】:

  • 取决于您要执行的操作,但 find 中的 -exec 标志可能对您有益。
  • 我收集每个具有这些扩展名的文件,然后将它们一个接一个地移动到另一个目的地。但是有些文件名包含空格。。我如何在这里使用 -exec?

标签: linux bash shell


【解决方案1】:

您可以将任意数量的命令传递给find

find $path \( -name "*.c" -or -name "*.cpp" -or -name "*.cxx" -or -name "*.cc" \) \
    -exec bash -c "echo cmd1 '{}'; echo cmd2 '{}'; echo etc." \;

另一种方法是编写一个函数:

function safe_copy() {
  echo "$1"     
}          

export -f safe_copy

find $path \( -name "*.c" -or -name "*.cpp" -or -name "*.cxx" -or -name "*.cc" \) \
     -exec bash -c "safe_copy '{}'" \;

您还可以编写脚本并使用 exec 而不是函数来调用它。

【讨论】:

    【解决方案2】:

    您可以使用-print0 作为find 参数,以打印null 分隔的文件名流。

    然后循环读取null分隔的流。

    find "$path" \( -name '*.c' -or -name '*.cpp' -or -name '*.cxx' -or -name '*.cc' \) -print0 |
    while IFS= read -r file
    do
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 2012-12-18
      相关资源
      最近更新 更多