이름이 비슷하지만 다른 하위 디렉터리에 있는 모든 파일을 연결하려고 합니다.
정확한 파일 일치를 위해 이 솔루션을 찾았지만 이를 부분 일치에 적용하는 방법을 잘 모르겠습니다.
여러 디렉터리에 동일한 이름을 가진 새로운 연결된 파일 생성
예시 파일 경로:
out/ch1/name1.1.assoc.txt
out/ch1/name2.1.assoc.txt
out/ch1/name3.1.assoc.txt
out/ch2/name1.2.assoc.txt
out/ch2/name2.2.assoc.txt
out/ch2/name3.2.assoc.txt
나는 20개의 서로 다른 ch 디렉토리를 가지고 있고, 파일 이름의 마지막 숫자는 디렉토리 번호와 일치합니다.
연결하려는 이름이 포함된 파일이 있습니다.
name1
name2
name3
이 솔루션을 적용하거나 이 파일을 다른 방식으로 연결하려면 어떻게 해야 합니까? 내가 원하는 최종 결과는 파일 목록의 각 이름에 대해 하나의 파일이 있는 디렉터리입니다(이 경우 최종 결과는 name1, name2 및 name3이라는 3개의 파일이 됩니다). 우리를
답변1
존재하다 zsh
:
for name (${(f)"$(<names.txt)"})
cat -- out/ch<->/$name.<->.assoc.txt(.n) > outdir/$name
존재하다 bash
:
zsh -c '
for name (${(f)"$(<names.txt)"})
cat -- out/ch<->/$name.<->.assoc.txt(.n) > outdir/$name
'
설치할 수 없는 경우 GNU 시스템 내에서 또는 GNU 시스템에서 수행할 수 있는 zsh
몇 가지 작업이 있습니다 .bash
readarray -t files < <(grep . names.txt)
shopt -s extglob failglob
for name in "${files[@]}"; do
printf '%s\0' out/ch+([0123456789])/"$name".+([0123456789]).assoc.txt |
sort -zV |
xargs -r0 cat -- > outdir/"$name"
done