
현재 폴더의 모든 .txt 파일 이름을 한 줄에 인쇄하려고 합니다. 다음 스크립트를 사용하고 있습니다. 그러나 파일 이름은 인쇄되지 않습니다.
REF_SEQ=""
find . -name "*.txt" -maxdepth 1 -type f |
while read f;
do
name=$(echo ${f}| xargs -I {} basename {} )
REF_SEQ+="${name} "
done
echo "Full Sequence: ${REF_SEQ}"
현재 폴더(A.txt, B.txt ...)에 3~4개의 .txt 파일이 있습니다. 나는 다음과 같이 출력을 기대하고 있습니다.
전체 시퀀스: A.txt B.txt ...
find
변수에 출력을 할당하지 않고 명령 만 사용하면 RED_SEQ
원하는 출력을 얻을 수 있습니다. 이는 find 명령이 제대로 작동하지만 변수에 할당할 수 없음을 의미합니다. 다양한 할당 연산자를 시도했지만 여전히 운이 없습니다.
답변1
에서 변수를 업데이트하려면 bash
다음 구문을 사용해야 합니다.
VAR="some stuff$VAR"
그러나 파이프를 사용하고 있으므로 while
루프가 하위 셸에서 실행되므로 변수가 손실됩니다.
이 문제를 해결하려면 다음 구문이 있어야 합니다.
while read f
do
done <<< $(input)
귀하의 경우에는 다음과 같습니다.
REF_SEQ=""
while read f;
do
name=$(echo ${f}| xargs -I {} basename {} )
REF_SEQ="${REF_SEQ}${name} "
done <<< $(find . -name "*.txt" -maxdepth 1 -type f)
echo "Full Sequence: ${REF_SEQ}"
답변2
문제는 파이프 기호 뒤에 {}를 사용한다는 것입니다. 이는 find의 -exec 옵션에서만 유효하지만 파이프 기호 뒤에는 유효하지 않습니다.
다음을 시도해 볼 수 있습니다.
REF_SEQ=$(find . -maxlength 1 -name "*.txt" -type f -printf "%f " | xargs)
그러면 원하는 결과가 나올 것입니다. printf-지시문 %f는 발견된 파일의 기본 이름을 출력하고 xargs는 결과를 "전치"합니다.
감사합니다 Jurgen