파일 이름에서 공백을 제거할 수 없습니다.

파일 이름에서 공백을 제거할 수 없습니다.

아래와 같이 파일 이름의 공백을 제거할 수 없습니다. 이 문제에 대한 해결 방법이 있으면 알려 주시기 바랍니다. 감사해요

/홈/파일:

Dec 14 22:10 testfiles 
Dec 15 12:30 test file1 
Dec 14 21:45 test file2 
Dec 16 02:30 testfile3 
$ ls -lrt| tr -s " "  > filelist.txt 
$ cat filelist.txt 
2022-12-14,testfiles 
2022-12-15,test 
2022-12-14,test 
2022-12-16,testfile3 

답변1

구문 분석되지 않았습니다 ls!

출력뿐만 아니라 날짜가 포함된 파일이 있는 경우 다음을 ls -l사용할 수 있습니다.진주의rename:

rename -n -E 's/^(\w+)\s+(\d{2})\s+(\d{2}:\d{2})\s+/$1-$2-$3,/g' -E 's/ //g' Dec*
rename(Dec 14 21:45 test file2 , Dec-14-21:45,testfile2)
rename(Dec 14 22:10 testfiles ,  Dec-14-22:10,testfiles)
rename(Dec 15 12:30 test file1 , Dec-15-12:30,testfile1)
rename(Dec 16 02:30 testfile3 ,  Dec-16-02:30,testfile3)

-n출력이 만족스러우면 제거합니다(모의 실행).

답변2

ls전혀 구문 분석하지 않고 디렉토리의 파일을 반복하는 것이 더 나을 것입니다 .

for file in *
do
    ymd=$(date --date "@$(stat -c '%Y' "$file")" +'%Y-%m-%d')
    [ -d "$file" ] && printf "%s,%s\n" "$ymd" "$file"
done

이 루프를 완료하면 공백을 생략하고 파일 이름을 작성하는 것이 간단합니다. 출력 줄을 수정하면 됩니다.

    [ -d "$file" ] && printf "%s,%s\n" "$ymd" "${file// /}"

귀하의 예에 따르면 이것은 그렇지 않습니다.이름을 바꿔라디렉터리에 있는 파일은 공백 없이 질문에 표시한 형식으로 나열됩니다.

관련 정보