我需要创建一个文件,将文件夹中的所有文件列入文本文件,以及逗号和后面的数字15。例如
我的文件夹有video.mp4, video2.mp4, picture1.jpg, picture2.jpg, picture3.png
我需要将文本文件读取如下:
video.mp4,15
video2.mp4,15
picture1.jpg,15
picture2.jpg,15
picture3.png,15
没有空格,每行只有filename.ext,15
。我正在使用树莓派。我知道命令ls > filename.txt
会将所有文件名放入一个文件夹中,但是如何在每行之后得到一个15?
由于
答案 0 :(得分:2)
bash 单行:
page.libraryPath
为避免在每次迭代时打开输出文件,您可以使用for f in *; do echo "$f,15" >> filename.txt; done
重定向整个输出:
> filename.txt
答案 1 :(得分:1)
你需要做这样的事情:
#!/bin/bash
for i in $(ls folder_name); do
echo $i",15" >> filename.txt;
done
可以在一行中执行此操作,但是,如果要创建脚本,请从长远来看考虑代码可读性。
正如@ CristianRamon-Cortes在下面的评论中所建议的那样,你不应该依赖ls
的输出,因为本讨论中解释了这些问题:why not parse ls。因此,以下是您应该如何编写脚本:
#!/bin/bash
cd folder_name
for i in *; do
echo $i",15" >> filename.txt;
done
如果您已经在文件夹中,则可以跳过部分cd folder_name
。
正如@kusalananda所建议的,你最好在完成后重定向,以避免在for循环的每次迭代中打开文件,所以脚本将如下所示:
#!/bin/bash
cd folder_name
for i in *; do
echo $i",15";
done > filename.txt
答案 2 :(得分:1)
$ printf '%s,15\n' *
picture1.jpg,15
picture2.jpg,15
picture3.png,15
video.mp4,15
video2.mp4,15
如果这些是目录中的唯一文件,这将有效。格式说明符%s,15\n
将应用于每个printf
的参数(当前目录中的名称),并且将附加,15
输出(和换行符)
如果还有其他文件,那么无论是否存在这样调用的文件,以下内容也会起作用:
$ printf '%s,15\n' video.mp4 video2.mp4 picture1.jpg picture2.jpg "whatever this is"
video.mp4,15
video2.mp4,15
picture1.jpg,15
picture2.jpg,15
whatever this is,15
或者,在所有MP4,PNG和JPEG文件上:
$ printf '%s,15\n' *.mp4 *.jpg *.png
video.mp4,15
video2.mp4,15
picture1.jpg,15
picture2.jpg,15
picture3.png,15
然后将其重定向到printf ...as above... >output.txt
的文件。
如果您正在使用Bash,那么这将不会使用任何外部实用程序,因为printf
内置于shell中。
答案 3 :(得分:0)
没有循环的解决方案:
ls | xargs -i echo {},15 > filename.txt
答案 4 :(得分:0)
只有1个命令行使用2个msr
命令重复(-r
)搜索特定文件:
msr -rp your-dir1,dir2,dirN -l -f "\.(mp4|jpg|png)$" -PAC | msr -t .+ -o '$0,15' -PIC > save-file.txt
--wt
添加到第一个命令,例如:msr --wt -l -rp your-dirs
--sz
但如果同时使用--sz
和--wt
,则只有前一个有效。--nd "^(test|garbage)$"
\r\n
中移除尾save-file.txt
:msr -p save-file.txt -S -t "\s+$" -o "" -R
在我的开放项目https://github.com/qualiu/msr msr.exe
目录中查看msr.gcc48
/ tools
等。