Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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 如何使用bash从文件扩展名中删除尾随空格?_Macos_Bash_Sed_Osx Yosemite - Fatal编程技术网

Macos 如何使用bash从文件扩展名中删除尾随空格?

Macos 如何使用bash从文件扩展名中删除尾随空格?,macos,bash,sed,osx-yosemite,Macos,Bash,Sed,Osx Yosemite,我首先在和尝试了一切,但都没有成功 例如,文件名是“image.jpg”,我想将其转换为“image.jpg” 请帮助,它也应该是递归的 试试看。(先备份数据) 将/tmp/替换为您的文件夹 对于苹果来说,这个怎么样: for oldname in * do newname=`echo $oldname | sed -e 's/ //g'` mv "$oldname" "$newname" done find-深度…是最好的答案,但不幸的是,它对您不可用(除非您安装自制) for解决方

我首先在和尝试了一切,但都没有成功

例如,文件名是
“image.jpg”
,我想将其转换为
“image.jpg”

请帮助,它也应该是递归的

试试看。(先备份数据)

将/tmp/替换为您的文件夹

对于苹果来说,这个怎么样:

for oldname in *
do
  newname=`echo $oldname | sed -e 's/ //g'`
  mv "$oldname" "$newname"
done

find-深度…
是最好的答案,但不幸的是,它对您不可用(除非您安装自制)

for
解决方案的一个困难是它不会首先深入目录层次结构。因此,您有可能首先重命名目录,然后无法重命名目录下的任何文件

要确保在任何父目录查找文件并进行反向排序之前重命名文件,请执行以下操作:

shopt -s globstar nullglob extglob
printf "%s\n" **/*[[:space:]] | sort -r | while IFS= read -r filename; do
    newname=${filename/%+([[:space:]])}
    mv "$filename" "$newname"
done

您的示例链接似乎显示的是换行符而不是空格。你能澄清一下你是如何使用前几篇文章中的代码的吗?可能将您的代码粘贴到此处..对于路径位于变量
filepath
中的单个文件:
shopt-s extglob;本地新路径;newpath=${filepath%%+([[:space:]]);[[$newpath!=$filepath]]&&mv“$filepath”“$newpath”
。您应该能够从那里进行概括。OSX没有
重命名
。OSX是一个UNIX,而且自从经过认证以来,实际上比任何Linux都要多<代码>重命名比非标准的稍差一些。顺便说一下,您更改的答案仍然是错误的。但是,我同意重命名在UNIX中被广泛使用。当他需要OSX时,他将问题标记为UNIX。可能是相同的,但在这个例子中,答案是不一样的。这是一个漫长的星期。顺便说一句,我不知道你从哪里得到的印象是,
rename
广泛可用。我刚查过。在OpenBSD上没有
重命名
;在Solaris上也是如此。我相信列表可能会更长。为什么你认为在OSX上找不到
find
find
是POSIX的一部分(POSIX中的
-depth
主程序也是POSIX的一部分-您不需要为
-depth
使用findutils),因此
/usr/bin/find
应该可以在vanilla上使用(没有CLT、Xcode或自制)。如果文件名中有换行符,您的答案将被打断,这里就是这种情况。感谢Glenn Jackman,您的代码几乎完美地完成了工作。它使用换行符重命名了所有文件名,但我仍然收到一个错误“someCode.sh:line 1:shopt:globstar:invalid shell option name”;但我读到这是因为我需要升级bash。
shopt -s globstar nullglob extglob
printf "%s\n" **/*[[:space:]] | sort -r | while IFS= read -r filename; do
    newname=${filename/%+([[:space:]])}
    mv "$filename" "$newname"
done