Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Bash 批量更改和替换子文件夹中的文件扩展名_Bash_Shell_Replace_File Extension_Mv - Fatal编程技术网

Bash 批量更改和替换子文件夹中的文件扩展名

Bash 批量更改和替换子文件夹中的文件扩展名,bash,shell,replace,file-extension,mv,Bash,Shell,Replace,File Extension,Mv,我想批量更改子文件夹中的文件。现有文件的扩展名为*.ada.npp。我想把它改成*.ada。问题是已经存在具有所需扩展名*.ada的文件。这些文件需要替换 我尝试了mmv和mv,但没有成功(见下文) 未完成任何操作。此循环将满足您的需要。从要开始搜索的顶级目录启动它 IFS=" ";for F in `find . -name "*.ada.npp"`;do B1=`echo "$F" | sed 's/.ada.npp$//'`;mv -- "$F" "$B1.ada";done 这个循环将

我想批量更改子文件夹中的文件。现有文件的扩展名为*.ada.npp。我想把它改成*.ada。问题是已经存在具有所需扩展名*.ada的文件。这些文件需要替换

我尝试了mmv和mv,但没有成功(见下文)


未完成任何操作。

此循环将满足您的需要。从要开始搜索的顶级目录启动它

IFS="
";for F in `find . -name "*.ada.npp"`;do B1=`echo "$F" | sed 's/.ada.npp$//'`;mv -- "$F" "$B1.ada";done

这个循环将满足您的需要。从要开始搜索的顶级目录启动它

IFS="
";for F in `find . -name "*.ada.npp"`;do B1=`echo "$F" | sed 's/.ada.npp$//'`;mv -- "$F" "$B1.ada";done
使用
查找

find . -name '*.ada.npp' -exec sh -c '
for f; do
  mv -- "$f" "${f%.npp}"
done' _ {} +
使用
查找

find . -name '*.ada.npp' -exec sh -c '
for f; do
  mv -- "$f" "${f%.npp}"
done' _ {} +

要重命名文件吗?什么是“批量更改”?批量更改意味着以自动方式对大量文件进行更改可能您只需要
-o
选项?看到了吗?要重命名文件吗?什么是“批量更改”?批量更改意味着以自动方式对大量文件进行更改可能您只需要
-o
选项?看它会失败!不管怎样,如果你用名字换行命名文件,你应得的:它会失败!不管怎样,如果你用名字中的换行命名一个文件,你应该得到它:“-”是什么?“{}+”是做什么的?为了完成命令,它是否与“\;”相同?我不确定这是否是一个很好的解决方案(尽管它有效)。
-exec
命令正在为每个找到的文件执行,为什么要在此之后使用循环?似乎有点奇怪。好吧,我收回它-清楚地表明,
-exec命令
-exec命令{}+
。“-”做什么?“{}+”是做什么的?为了完成命令,它是否与“\;”相同?我不确定这是否是一个很好的解决方案(尽管它有效)。
-exec
命令正在为每个找到的文件执行,为什么要在此之后使用循环?似乎有点奇怪。好吧,我收回它-清楚地表明,
-exec命令
-exec命令{}+