질문:
안녕하세요, 여러 디렉터리(예: /path/to/*.faa)에 있는 각 *.faa 파일을 반복하려고 합니다.
그런 다음 스크립트가 *.faa 파일과 동일한 디렉토리에 있는 것처럼 스크립트(./script.py)를 사용하십시오. 쉘스크립트로 이것이 가능합니까?
내가 시도한 것:
for FAA in $(find . -name "*.faa")
do
cd ../$FAA
python3 ../script.py
done
이에 대한 변형을 시도했지만 디렉터리를 파일로 변경해도 작동하지 않지만 디렉터리에 액세스하는 방법을 모르겠습니다.
원하는 출력:
/path/to/1.faa, path/2/2.faa와 같은 여러 디렉터리에 있는 각 .faa 파일에 대해 위의 두 수준에서 스크립트를 실행합니다. 모든 *.faa 파일과 동일한 디렉토리에 있는 것과 같습니다. 또는 이것이 가능하지 않은 경우 비슷한 것을 달성하는 가장 좋은 솔루션은 무엇입니까?
답변1
find . -type f -name '*.faa' -execdir python3 ../script.py ';'
이는 python3 ../script.py
다음 디렉터리에서 실행됩니다.각작업 디렉토리로 파일을 찾으십시오.
../script.py
귀하의 텍스트와 코드가 다소 충돌하기 때문에 또는 이어야 하는지 잘 모르겠습니다 ../../script.py
.
script.py
또한 이는 지정된 디렉터리에서 파일을 실제로 사용할 수 있는 경우에만 작동한다는 점에 유의하세요. 스크립트 파일의 절대 경로를 제공하는 것이 더 안전할 수 있습니다.
find . -type f -name '*.faa' -execdir python3 /path/to/script.py ';'
.faa
위 코드는 디렉터리에 여러 파일이 있더라도 발견된 모든 파일에 대해 스크립트를 실행합니다. 하나 이상의 파일이 포함된 각 디렉터리에 대해 한 번만 스크립트를 실행하려면 다음을 수행합니다 .faa
.
find . -type d -exec sh -c '
for dir do
set -- "$dir"/*.faa
if [ "$#" -gt 0 ]; then
( cd "$dir" && python3 /path/to/script.py )
fi
done' sh {} +
그러면 발견된 각 디렉토리에 대해 짧은 쉘 스크립트가 실행됩니다. 스크립트는 디렉터리에 .faa
파일이 있는지 확인합니다. 존재하는 경우 이 디렉터리를 작업 디렉터리로 사용하여 Python 스크립트를 실행합니다.
관련된: