2016-09-23 176 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 

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

相關問題