set -x
for f in ~/1/2/*/*_1.txt; do
subdir="${f%/*}"
pushd "$subdir" &>/dev/null
file="${f##*/}"
expTool INPUT1= "${f##*/}" INPUT2= "${f%_1.txt}_2.txt OUTPUT1= "${f%_1.txt}_3.txt" OUTPUT2= "${f%_2.txt}_4.txt"
done
expTool error: [Errno 2] No such file or directory: '*_1.txt'
인용을 뺐지만 작동하지 않습니다.
편집: set -x 사용
+for f in '/User/admin/1/2/*/*_1.txt'
+subdir='/User/admin/1/2/*'
+pushd '/User/admin/1/2/*'
+file='*_1.txt'
+expTool INPUT= '*_1.txt' OUTPUT= '${f%_1.txt}_2.txt'
그러면 "*" 구문이 와일드카드(?)로 등록되지 않은 것으로 보입니다. 저는 Mac OSX 10.8.6을 사용하고 있습니다.
답변1
와일드카드 확장을 비활성화하는 스크립트의 앞부분을 실행 중이 거나 set -f
일치하는 파일이 없습니다. 일치하는 파일이 없으면 패턴은 변경되지 않은 채 유지되므로 for 루프는 패턴이 변경되지 않은 요소에서 작동합니다. Bash에서는 shopt -s nullglob
빈 목록으로 확장하는 대신 를 사용하여 일치하지 않는 패턴을 만들 수 있습니다.
답변2
코드를 이해했는지 잘 모르겠습니다.
for f in ~/1/2/*/*_1.txt; do
fdn="${f%/*}"
fbn1="${f##*/}"
fbn2="${fbn1//_1/_2}"
fbn3="${fbn1//_1/_3}"
fbn4="${fbn1//_1/_4}"
expTool INPUT1= "$fdn/$fbn1" INPUT2= "$fdn/$fbn2" OUTPUT1= "$fdn/$fbn3" OUTPUT2= "$fdn/$fbn4"
done
제가 주제인 경우 알려주시면 답변을 삭제하겠습니다!