Linux命令查找及其占位符{}在多行命令中



在使用-execdir"""的多行转义以方便阅读时,我与bash和命令find及其占位符{}作斗争。

我想迭代文件夹$SOURCE,并在文件夹$TARGET中创建每个文件夹的tar存档,如果这个tar不存在的话。

我尝试了许多转义{}的变体,但我无法将当前文件夹保存在变量中。我想知道这个占位符是如何工作的,以及如何将其值保存到多行命令中的变量。

一行正常

find "$SOURCE" -mindepth 1 -maxdepth 1 -type d -execdir sh -c 'DIR="{}";echo $DIR' ;

返回
./2007_10_03 Event1
./2007_10_12 Event2

但不能与sh和-c

作为多行命令使用
find "$SOURCE" -mindepth 1 -maxdepth 1 -type d 
-execdir sh -c """
DIR="{}"
echo $DIR
""" ;

返回
sh: line 2: Event1: command not found
sh: line 2: Event2: command not found

像这样:

find "${SOURCE:?}" -mindepth 1 -maxdepth 1 -type d -exec sh -c '
dir="$1"
echo "$dir"
' sh {} ;    

这比使用{}

更具可读性和安全性${SOURCE:?}是一个特殊的形参展开,用于测试变量是否存在。如果没有,find将不会执行,并且您将得到如下错误:

bash: SOURCE: parameter null or not set

最新更新