我正在尝试编写“一行脚本”或非常小的 bash 脚本。
它必须找到文件(例如./xxx/one.php
),如果该文件存在,则编辑(使用printf
或echo
)同一目录中的其他文件(例如./xxx/test.php
)。
现在我做了第二部分 - 编辑现有文件,但我不知道如何或在哪里输入“if”。
其实我有类似的东西
for file in `find . -name "test*.php"` ; do
(printf "It's me, on first line \n and me on second line\n" && cat $file) > "$file".bak && mv "$file".bak "$file"
done
应该是这样的吧?
if [[ `find . -name "one*.php` ]]; do
for file in `find . -name "test*.php"` ; do
(printf "It's me, on first line \n and me on second line\n" && cat $file) > "$file".bak && mv "$file".bak "$file"
done
done
答案1
-execdir
这里的选项很find
方便:
find -name 'one*.php' -execdir bash -c '
if [ -e test.php ] ; then
printf ... && mv test.bak test.php
fi' {} \;
与 类似
-exec
,但指定的命令是从包含匹配文件的子目录运行的,该子目录通常不是您开始查找的目录。
-execdir
将在找到的文件所在的目录中运行给定的命令,因此test.php
它“旁边”的文件将在那里进行操作。在这里,我们在该目录中启动bash
并运行一个小脚本来进行您想要的操作。无需复杂的路径操作或重新查找文件。上面我检查了该文件是否存在,但如果它始终存在(或者您想无条件创建它),您可以将其取出if
。
-execdir
是一个 GNU 查找扩展,不在 POSIX 中,但您很可能已经给定了标签。需要注意的是您的PATH
环境变量不能包含.
或任何其他相对路径(包括空元素),出于安全原因,因此如果您的环境元素是这样,您需要先重置它:PATH=... find ...
。