Linux
在同一目錄中存在其他文件時查找文件
我正在嘗試做“單行腳本”或非常小的 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
-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 find 擴展,不在 POSIX 中,但你很可能已經給了你的標籤。一個警告是,出於安全原因,您的PATH
環境變數不能包含.
或任何其他相對路徑(包括空元素),因此如果您的環境變數包含,您需要先重置它:PATH=... find ...
.