但不能与sh和
作为多行命令使用
在使用-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