假设我有一个名为的文件list.txt
包含路径到目录内的文件;
路径模式如下:
./path/to/file.txt
./path/to/another/file.txt
... etc
我想循环list.txt
文件内部以获取文件的路径并使用更改其编码iconv
;
如果所有内容都在同一个目录中,我会这样做:
for i in `cat list.txt` ; do iconv -f windows-1256 -t utf8 $i > new_$i; done
但问题我现在面临的是,由于它是多级路径,因此命名iconv
打印的输出new_$i
在开始路径——我猜——这给了我错误:
No such file or directory
iconv
那么,我怎样才能得到如下的输出:
./path/to/new_file.txt
./path/to/another/new_file.txt
... etc
答案1
如果你使用bash
shell,那么你可以使用类似这样的命令:
while read name
do dir="${name%/*}" file="${name##*/}"
iconv -f windows-1256 -t utf8 "$dir/$file" -o "$dir/new_$file"
done < list.txt
分配dir
和file
使用构造的行记录在手册页的Parameter expansion
部分中。构造周围的引号用于处理文件名中的空格。EXPANSION
bash
如果您想在使用之前测试类似的东西,您可以echo
在感兴趣的命令前面加上它(iconv
在这个例子中),以确保该命令是您想要的。