Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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
Macos 如何在mac中的多个文件名中同时附加相同的字符串?_Macos_Unix_Command Line Tool - Fatal编程技术网

Macos 如何在mac中的多个文件名中同时附加相同的字符串?

Macos 如何在mac中的多个文件名中同时附加相同的字符串?,macos,unix,command-line-tool,Macos,Unix,Command Line Tool,我只需要将字符串“eng”附加到同一目录中的多个文件名中,而无需在MAC终端中更改其扩展名。我搜索了很长一段时间,我发现mv命令立即重命名文件。但我不知道如何在我的场景中实现。有什么能指引我吗 谢谢这应该可以做到: IFS=$(echo -en "\n\b") cd /path/to/directory for f in * do mv "$f" "${f}eng" done for i in *; do name="${i%.*}"; mv "$i" "${name}eng${i#$

我只需要将字符串“eng”附加到同一目录中的多个文件名中,而无需在MAC终端中更改其扩展名。我搜索了很长一段时间,我发现mv命令立即重命名文件。但我不知道如何在我的场景中实现。有什么能指引我吗

谢谢

这应该可以做到:

IFS=$(echo -en "\n\b")
cd /path/to/directory
for f in *
do
    mv "$f" "${f}eng"
done
for i in *; do name="${i%.*}"; mv "$i" "${name}eng${i#$name}"; done

虽然它不会“一次”重命名所有文件,但这是不可能的。

如果您有包含以下文件的目录:

a.ext
b
c.long.sh
您要将其重命名为:

aeng.ext
beng
c.longeng.sh
Mac终端(bash)中的以下“oneliner”应该可以做到这一点:

IFS=$(echo -en "\n\b")
cd /path/to/directory
for f in *
do
    mv "$f" "${f}eng"
done
for i in *; do name="${i%.*}"; mv "$i" "${name}eng${i#$name}"; done
解释:

  • 用于i in*;执行
    -迭代所有文件名
  • name=“${i%.*}”
    -提取扩展名之前的名称部分(去掉最后一个点以外的所有内容)
  • mv
    -处理重命名
  • ${name}eng
    -将eng添加到名称中
  • ${i#$name}
    -获取扩展名(这将从原始文件名中删除名称部分)

注意:如果您想预览它将执行的操作,但不实际执行重命名,请在“mv”之前插入“echo”。这将把语句打印到屏幕上,而不是执行重命名。

那么您想在文件内容或文件名中附加“eng”吗?很抱歉,要在文件名中附加它