对于当前目录中的每个文件,我想: 将“ - ”替换为“ - ”,将“+”替换为“”。
我猜这将是bash脚本和正则表达式的某种组合,但我从来没有做过。我在OS X上,虽然我认为这不重要。
谢谢!
答案 0 :(得分:2)
for file in *; do
new=${file//-/ - };
new=${new//+/ };
if [ "$file" != "$new" ]; then
mv "$file" "$new";
fi;
done
答案 1 :(得分:1)
unix方式:
for a in * ; do
mv $a $(echo $a | sed -s 's/-/ - /' -e 's/\+/ /')
done
unix调试方式涉及在'mv'之前运行'echo mv'直到你确定。
答案 2 :(得分:0)
如果可以,我建议安装/使用detox。
答案 3 :(得分:0)
@Kevin我会使用tr来保证安全,你也需要在sed命令之间使用第二个管道运算符:
for f in `ls` ; do
mv $f $(echo $f | sed -s 's/-/ - /' | tr '+' ' ')
done
如果要取消有关将同一文件移动到自身的错误消息,请使用以下命令:
for f in `ls` ; do
n=$(echo $f | tr -s 's/-/ - /' | tr '+' ' ')
if [ $f != $n ]; then
mv $f $n
fi
done
答案 4 :(得分:0)
我的版本:
for FILE in `find . -maxdepth 1 -type f`; do mv "$FILE" "`echo "$FILE" | sed -e 's/-/ - /g' -e 's/+/ /g'`"; done;
答案 5 :(得分:0)
这可能对您有用:
printf "%s\n" * |
sed 'h;y/+/ /;s/-/ - /g;x;G;/\(.*\)\n\(\1\)/d;s/\(.*\)\n\(.*\)/mv -v '\''\1'\'' '\''\2'\''/' |
sh
答案 6 :(得分:-1)
嗯,这是Bash的方法,但我不确定它是否适用于OSX。它使用了parameter substitution的漂亮技巧。
for file in *
do
newFile=${file//+/ }
newFile=${newFile//-/ - }
mv "$file" "$newFile"
done
编辑:好的,你们中哪一个都投了我一票?解释一下自己。我的回答几乎与最高回答相同,我先回答。