다른 디렉토리의 파일을 반복합니다.

다른 디렉토리의 파일을 반복합니다.

값을 포함하고 여러 디렉터리에 저장된 텍스트 파일 세트가 있습니다. 여러 디렉터리의 각 파일에 명령을 적용할 수 있도록 루프를 사용하여 명령을 실행해야 합니다.

내가 생각해낸 코드는

#!/bin/bash
#
dir=`pwd`
datapath1=$dir/datafiles1
datapath2-$dir/datafiles2

for file in /$datapath1/*.txt ; do 
   sort -k1,1rn < "$file"
done > file.cat &&
# 
for file in /$datapath2/*.txt ; do 
   sort -k1,1rn < "$file"
done > file.cat &&
#

분명히 이것은 많은 디렉토리에서 매우 어렵습니다. 단일 루프에 수용할 수 있는 단순화된 방법이 있습니까?

답변1

스크립트에 문제가 있습니다. 모든 루프가 재정의됩니다 file.cat.

루프의 모든 파일을 반복하면 문제를 제거하고 스크립트를 단순화할 수 있습니다.

#!/bin/bash

dir=$(pwd)
datapath1=$dir/datafiles1
datapath2=$dir/datafiles2

for file in "$datapath1"/*.txt "$datapath2"/*.txt; do 
   sort -k1,1rn < "$file"
done > file.cat

또한 항상 변수를 인용하십시오.


Kusalananda가 지적했듯이 디렉터리 이름이 매우 유사한 경우 glob을 사용하여 관련된 모든 디렉터리와 파일의 주소를 지정할 수도 있습니다. 주어진 예에서 이것은 실제로 가능합니다

sort -k1,1rn "$PWD"/datafiles[12]/*.txt > file.cat

관련 정보