如何使用 find -exec 递增?

rom*_*sse 5 bash shell increment

我想做这样的事情

#!/bin/bash

nb=$(find . -type f -name '*.mp4' | wc -l)
var=0
find . -type f -name '*.mp4' -exec ((var++)) \;
echo $var
Run Code Online (Sandbox Code Playgroud)

但它不起作用?你能帮助我吗 ?

Cha*_*ffy 6

你不能。每个exec过程都在单独的过程中执行。这些进程不是 shell 的一部分,因此它们无法访问或更改 shell 变量。(他们可能会读取环境变量,但是一旦进程退出,这些变量的更新版本就会丢失;他们无法进行更改)。

如果要修改 shell 状态,则需要在 shell 本身中执行此操作。因此:

#!/usr/bin/env bash
#              ^^^^- NOT /bin/sh; do not run as "sh scriptname"

while IFS= read -r -d '' filename; do
  ((++var))
done < <(find . -type f -name '*.mp4' -print0)
Run Code Online (Sandbox Code Playgroud)

请注意前增量与后增量——如果您运行脚本,这可以帮助您避免一些问题set -e(尽管我认为更好的做法是避免该“功能”)。

有关详细信息,请参阅使用查找