Linux

在同一目錄中存在其他文件時查找文件

  • April 18, 2019

我正在嘗試做“單行腳本”或非常小的 bash 腳本。

它必須找到文件(例如./xxx/one.php),如果該文件存在,則編輯(使用printfecho)在同一目錄中的其他文件(例如./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

-execdir選項在這裡find很方便:

find -name 'one*.php' -execdir bash -c '
if [ -e test.php ] ; then
   printf ... && mv test.bak test.php
fi' {} \;

-execdir

類似-exec,但指定的命令是從包含匹配文件的子目錄執行的,通常不是您開始查找的目錄。

-execdir將在找到的文件所在的目錄中執行給定的命令,因此test.php“旁邊”的文件將在那裡進行操作。在這裡,我們bash在該目錄中啟動並在那裡執行一個小腳本來進行您想要的操作。無需複雜的路徑操作或重新查找文件。上面我檢查了文件是否存在,但如果它總是存在(或者你想無條件地創建它)你可以取if出來。

-execdir是一個 GNU find 擴展,不在 POSIX 中,但你很可能已經給了你的標籤。一個警告是,出於安全原因,您的PATH環境變數不能包含.或任何其他相對路徑(包括空元素),因此如果您的環境變數包含,您需要先重置它:PATH=... find ....

引用自:https://unix.stackexchange.com/questions/513311