Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用*解析文件。需要写文件名吗_Linux_Unix_Command Line_Command Prompt - Fatal编程技术网

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

Linux 使用*解析文件。需要写文件名吗,linux,unix,command-line,command-prompt,Linux,Unix,Command Line,Command Prompt,我在使用UNIX命令时遇到以下问题。我希望浏览大量文件,并使用转换它们的命令来转换它们。我的想法是这样工作:command*.fileending>*.newfileending 问题是我希望保留文件名,只替换文件结尾。因此,filename.fileending应该变成filename.newfileending我如何实现这一点?使用for循环: rename .fileending .newfileending * for file in *.krn; do hum2mid "$fil

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

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

使用for循环:

rename .fileending .newfileending *
for file in *.krn; do
  hum2mid "$file" -o "${file%.krn}.mid"
done
在一行中:
用于*.krn中的文件;do hum2mid“$file”-o“${file%.krn}.mid”;完成


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

find -type f -name '*.krn' -print0 \
  | xargs -0 -n1 sh -c 'hum2mid "$1" -o "/destination/dir/$(basename ${1%.krn}.mid)"' -
请注意,如果来自另一个目录的文件具有相同的名称,这将覆盖已转换的文件。

使用for循环:

for file in *.krn; do
  hum2mid "$file" -o "${file%.krn}.mid"
done
#!/bin/bash
ls -1 *.fileending  | while read i; do
  command "$i" > "${i/%.fileending/.newfileending}"
done
在一行中:
用于*.krn中的文件;do hum2mid“$file”-o“${file%.krn}.mid”;完成


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

find -type f -name '*.krn' -print0 \
  | xargs -0 -n1 sh -c 'hum2mid "$1" -o "/destination/dir/$(basename ${1%.krn}.mid)"' -
请注意,如果来自另一个目录的文件具有相同的名称,这将覆盖已转换的文件

#!/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+xfoo.sh
,最后执行
find-maxdepth 1-a-type f-a-name'*.fileending'-print0 | xargs-0-n1-J'%./foo.sh“%”

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

创建文件
foo.sh

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


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

谢谢你的回答,但我真的不明白。如何使用命令更改此解决方案的内容?我可能有点不清楚。不仅仅是我想给他们重新命名。我希望可以先在他们身上执行命令。
rename(1)
使用不同的语法。它说突击队重命名不存在。也许是因为我在cygwin工作?在发布我的答案之前,我在OpenSuSE 11.x中验证了该命令。它使用
rename
from
util-linux-ng
v2.16谢谢你的回答,但我真的不明白。如何使用命令更改此解决方案的内容?我可能有点不清楚。不仅仅是我想给他们重新命名。我希望可以先在他们身上执行命令。
rename(1)
使用不同的语法。它说突击队重命名不存在。也许是因为我在cygwin工作?在发布我的答案之前,我在OpenSuSE 11.x中验证了该命令。它使用
rename
from
util-linux-ng
v2.16该命令到底是如何工作的?也许它已经提供了一个函数来写入一个新文件。它的工作原理如下:hum2mid FileName.fileending-o NewFileName.newfileendingh该命令到底是如何工作的?可能它已经提供了一个函数来写入一个新文件。它的工作原理如下:hum2mid FileName.fileending-o NewFileName.newfileendingI试图对*.krn中的文件执行以下命令;执行hum2mid“$file”-o“${file%.krn}.mid”完成(写在单行上),但当我按Enter键时不会发生任何事情。谢谢!现在它起作用了。还有一个问题。我希望处理不同文件夹中的大量文件,并将.mid文件放在一个新文件夹中。如何实现这一点?我想,对于不同的文件夹,您必须求助于涉及find+xargs的解决方案。要存储在单个目录中,请使用绝对路径并附加新的文件名。我已经看过find/essen/america-typef-print0 | xargs-0。。。但不知道如何从那里继续下去。我应该写什么?我尝试了以下查找-type f-name'*.krn'-print0\| xargs-0-n1 sh-c'hum2mid“$1”-o/GermMidi/“${1%.krn}.mid””,它返回了此错误。查找:搜索路径必须位于表达式之前。。。错误:无法打开文件。我位于一个包含.krn文件的文件夹中。我以前创建过GermMidi文件夹;执行hum2mid“$file”-o“${file%.krn}.mid”完成(写在单行上),但当我按Enter键时不会发生任何事情。谢谢!现在它起作用了。还有一个问题。我希望处理不同文件夹中的大量文件,并将.mid文件放在一个新文件夹中。如何实现这一点?我想,对于不同的文件夹,您必须求助于涉及find+xargs的解决方案。要存储在单个目录中,请使用绝对路径并附加新的文件名。我已经看过find/essen/america-typef-print0 | xargs-0。。。但不知道如何从那里继续下去。我应该写什么?我尝试了以下查找-type f-name'*.krn'-print0\| xargs-0-n1 sh-c'hum2mid“$1”-o/GermMidi/“${1%.krn}.mid””,它返回了此错误。查找:搜索路径必须位于表达式之前。。。错误:无法打开文件。我位于一个包含.krn文件的文件夹中。我以前创建过GermMidi文件夹。当然,如果你有这样的文件,你可以使用
find-print0
xargs-0
。已经更新了我的答案。谢谢你的努力!上面提到的knittl的答案很有效,所以我使用了它。当然,如果你有这样的文件,你可以使用
find-print0
xargs-0
。已经更新了我的答案。谢谢你的努力!上面提到的knittl的答案很有效,所以我用了它