
以下のようにファイル名のスペースを削除できません。この問題の回避策がある場合はお知らせください。ありがとう
/ホーム/ファイル:
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 -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// /}"
あなたの例によると、これはそうではありません。名前を変更するディレクトリ内のファイルは、スペースなしで質問に表示された形式で一覧表示されます。