使用*来解析文件。需要写文件名

时间:2012-03-04 16:52:28

标签: linux unix command-line command-prompt

使用UNIX命令时出现以下问题。我希望浏览大量文件并使用转换它们的命令进行转换。我的想法是这样工作:command *.fileending > *.newfileending

问题是我希望保留文件名,只替换文件结尾。因此filename.fileending应成为filename.newfileending我如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

使用for循环:

for file in *.krn; do
  hum2mid "$file" -o "${file%.krn}.mid"
done

在一行中:for file in *.krn; do hum2mid "$file" -o "${file%.krn}.mid"; done


要以递归方式将命令应用于文件和子目录,请使用find|xargs模式:

find -type f -name '*.krn' -print0 \
  | xargs -0 -n1 sh -c 'hum2mid "$1" -o "/destination/dir/$(basename ${1%.krn}.mid)"' -

请注意,如果来自其他目录的文件具有相同名称,则会覆盖已转换的文件。

答案 1 :(得分:0)

rename .fileending .newfileending *

答案 2 :(得分:0)

#!/bin/bash
ls -1 *.fileending  | while read i; do
  command "$i" > "${i/%.fileending/.newfileending}"
done

如果您需要进程'怪异'文件名(例如嵌入式'\ n'),您可以使用以下技巧:

创建文件foo.sh

#!/bin/bash
command "$1" > "${1/%.fileending/.newfileending}"

,然后执行chmod +x foo.sh,最后执行find . -maxdepth 1 -a -type f -a -name '*.fileending' -print0 | xargs -0 -n 1 -J '%' ./foo.sh "%"