값을 포함하고 여러 디렉터리에 저장된 텍스트 파일 세트가 있습니다. 여러 디렉터리의 각 파일에 명령을 적용할 수 있도록 루프를 사용하여 명령을 실행해야 합니다.
내가 생각해낸 코드는
#!/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