2016-09-23 156 views
0

我想重命名I文件,这是一个变量,但我有问题。重命名文件,而不是文件路径中的目录

$ mkdir -p ~/foo/fooYes/ 
$ touch ~/foo/fooYes/fooYes.txt 
$ OUTPUT=~foo/fooYes/fooYes.txt 
$ echo $OUTPUT 
~/foo/fooYes/fooYes.txt 
$ rename 's/fooYes/fooNo/' "${OUTPUT}" 
Can't rename '/Users/medialab/foo/fooYes/fooYes.txt' to '/Users/medialab/foo/fooNo/fooYes.txt': No such file or directory 

两个问题:

为什么告诉我,我不能重命名?

更重要的是,我想重命名fooYes.txt,而不是它的父目录。

我使用上面的简化示例作为shell脚本的填充我有其中“$ {OUTPUT}”是ffmpeg命令的结果。我想重命名“$ {OUTPUT}”的基本名称,但由于它与其父目录共享相同的名称(当然不包括扩展名),因此它是父目录,而不是重命名的“$ {OUTPUT}”。

+0

您似乎已经创建目录'fooYes',但不是'fooNo';您正尝试复制到不存在的目录。 ''/Users/medialab/foo/fooNo/fooYes.txt':没有这样的文件或目录' –

+0

尝试使用mv命令(移动)而不是重命名 – Mike76

+0

@ Mike76将mv允许我重命名一个变量? – Bleakley

回答

0

您也可以使用此:

mv file1 file2 
+0

当file1是一个变量,我只想改变其名称的一部分时,我该怎么办? – Bleakley

+0

你可以使用shell脚本来完成它。 – Unknown

+0

是的,这是所有的shell脚本的一部分,其中“$ {OUPUT}是ffmpeg命令的结果,然后我想重命名”$ {OUTPUT},但是我遇到了上面简化的问题。 – Bleakley

0
#!/bin/bash 

mkdir -p ~/foo/fooYes/ 
touch ~/foo/fooYes/fooYes.txt 
OUTPUT=~/foo/fooYes/fooYes.txt 
echo $OUTPUT 
PARENTDIR=$(dirname $OUTPUT) 
echo $PARENTDIR 
cd $PARENTDIR 
rename 's/fooYes/FooNo/' *.txt 
cd ~ 
shift 

不是很优雅,但它正是我想要的。如果有人有更好的解决方案,请分享!

相关问题