[linux] 사용자 정의 구분 기호를 사용하여 여러 줄의 파일 이름을 하나로 묶는 방법은 무엇입니까?

ls -1한 줄로 결과를 결합하고 원하는대로 구분하고 싶습니다.

이것을 달성하기 위해 사용할 수있는 표준 Linux 명령이 있습니까?



답변

첫 번째 옵션과 비슷하지만 후행 구분 기호를 생략합니다.

ls -1 | paste -sd "," -


답변

편집 : 단순히 ” ls -m “구분자를 쉼표로 사용하려면

아, 힘과 단순성!

ls -1 | tr '\n' ','

“쉼표를 변경 , 당신이 원하는대로에”. 여기에는 “후행 쉼표”가 포함됩니다.


답변

마지막 쉼표를 개행 문자로 바꿉니다.

ls -1 | tr '\n' ',' | sed 's/,$/\n/'

ls -m 화면 너비 문자에 개행 문자를 포함합니다 (예 : 80 번째 문자).

대부분 배쉬 ( ls외부 만 ) :

saveIFS=$IFS; IFS=$'\n'
files=($(ls -1))
IFS=,
list=${files[*]}
IFS=$saveIFS

Bash 4에서 readarray(aka mapfile) 사용

readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS

제안에 대해 gniourf_gniourf에게 감사합니다.


답변

이건 대단해

ls -1 | awk 'ORS=","'

ORS는 “출력 레코드 구분 기호”이므로 이제 행이 쉼표로 결합됩니다.


답변

설정 IFS과 사용의 조합은 "$*"원하는 것을 할 수 있습니다. 서브 쉘을 사용하고 있으므로이 쉘의 $ IFS를 방해하지 않습니다

(set -- *; IFS=,; echo "$*")

출력을 캡처하려면

output=$(set -- *; IFS=,; echo "$*")


답변

ls일반적으로 구문 분석 은 권장되지 않으므로 다음 과 같이 더 나은 대안을 사용하는 것이 좋습니다find .

find . -type f -print0 | tr '\0' ','

또는 findand 를 사용 하여 paste:

find . -type f | paste -d, -s

파일 시스템과 관련이없는 여러 줄을 일반적으로 결합 하려면 Unix 명령 줄에서 간결하고 이식 가능한“결합”을 확인하십시오 .


답변

바퀴를 재발 명하지 마십시오.

ls -m

정확히 그렇습니다.