Answers:
您可以在basename
此处使用命令:
touch "$folder/$(basename "$filePng" .png).txt"
请注意其他$folder/
。这是必需的,因为basename命令会从中删除路径。
$filePng
-它们也很有用。
$( )
建立了新的报价上下文。
通过改变钢螺丝刀已经提到的内容-参数扩展-我们可以使用字符串替换来完成这项工作。此外,您应该引用变量。以下是您编辑的脚本。
#!/bin/bash
folder='/home/data/mnist/training'
for filePng in "$folder"/*
do
touch "${filePng/.png/.txt}"
done
如果要创建的文件很多,那么一次“触摸”一个以上的文件是值得的,这样就不必为每个文件派生一个新进程(如果执行多个文件,则需要花费很多时间。一千次)。
xargs
此选项将一次提供touch
命令的多个路径,通常为数千条或系统可以在单个命令行中容纳的任何路径。
find "$folder" -mindepth 1 -maxdepth 1 -name '*.png' -print0 |
sed -ze 's/\.png$/.txt/' |
xargs -r0 -- touch --
该选项根本不会运行touch
,而是使用Bash / Bourne / POSIX Shell功能,而这些功能根本不需要子流程。
for f in "$folder"/*.png; do
: >> "${f%.png}.txt"
done
for filePng in "$folder"/*
和touch "$filePng".txt
-请注意,只有在前面加引号时才引用它们$
。