같은 디렉터리에 다른 파일이 있을 때 파일 찾기

같은 디렉터리에 다른 파일이 있을 때 파일 찾기

나는 "한 줄 스크립트"나 아주 작은 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' {} \;

-execdir

와 유사 -exec하지만 지정된 명령은 일반적으로 검색을 시작한 디렉터리가 아닌 일치하는 파일이 포함된 하위 디렉터리에서 실행됩니다.

-execdir주어진 명령은 발견된 파일과 동일한 디렉토리에서 실행되므로 test.php"옆에 있는" 파일이 그곳에서 작동됩니다. 여기서는 bash원하는 작업을 수행하기 위해 해당 디렉터리에서 작은 스크립트를 시작하고 실행합니다. 복잡한 경로 조작이나 파일 다시 찾을 필요가 없습니다. 위에서는 파일이 존재하는지 확인했는데, 항상 존재하는 경우(또는 무조건 생성하고 싶은 경우) 빼면 됩니다 if.

-execdirPOSIX가 아닌 GNU 조회 확장이지만 레이블을 지정했을 가능성이 높습니다. 알아두어야 할 것은환경 변수는 또는 다른 상대 경로를 PATH포함할 수 없습니다..(빈 요소 포함) 보안상의 이유로 환경 요소가 이와 같은 경우 먼저 재설정해야 합니다 PATH=... find ....

관련 정보