我无法删除文件名中的空格,如下所示,请告知此问题是否有任何解决方案。谢谢
/home/文件:
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// /}"
请注意,根据您的示例,这并不改名目录中的文件,它只是以您在问题中显示的格式列出它们,不带空格。