我有這樣的事情:在多個目錄中的文件重命名爲目錄名
v_1/file.txt
v_2/file.txt
v_3/file.txt
...
,我想這些文件重命名爲這樣的事情:在同一目錄
v_1.txt
v_2.txt
v_3.txt
...
。
我想我可以使用rename
但我無法弄清楚如何將它與文件夾和文件重命名同時使用。
我有這樣的事情:在多個目錄中的文件重命名爲目錄名
v_1/file.txt
v_2/file.txt
v_3/file.txt
...
,我想這些文件重命名爲這樣的事情:在同一目錄
v_1.txt
v_2.txt
v_3.txt
...
。
我想我可以使用rename
但我無法弄清楚如何將它與文件夾和文件重命名同時使用。
結果可以與循環和mv
一個bash實現空間。相關link。
基於註釋的另一解決方案(即具有在命名空間以及目錄的工作):
find . -type d -not -empty -exec echo mv \{\}/file.txt \{\}.txt \;
似乎很簡單的對我說:
for subdir in *; do mv $subdir/file.txt $subdir.txt; done;
注意的是,上述解決方案將無法工作,如果目錄名稱包含:
$ mkdir /tmp/sandbox
$ cd /tmp/sandbox
$ mkdir v_{1,2,3}
$ touch v_{1,2,3}/file.txt
$ rename -v 's#/file##' v_{1,2,3}/file.txt
rename v_1/file.txt v_1.txt
rename v_2/file.txt v_2.txt
rename v_3/file.txt v_3.txt
$ ls -F
v_1/ v_1.txt v_2/ v_2.txt v_3/ v_3.txt
您可以使用rnm。該命令將是:
rnm -fo -dp -1 -ns '/pd0/.txt' -ss '\.txt$' /path/to/the/directory
-fo
意味着文件唯一模式。
-dp
目錄深度。 -1使其對所有子目錄遞歸。
-ns
意味着名稱字符串,即文件的新名稱。
/pd0/
是受重命名操作的文件的直接父目錄。
-ss
是一個搜索字符串(正則表達式)。 '\.txt$'
正則表達式搜索的文件名末尾帶.txt
文件。
/path/to/the/directory
這是v_1,v_2 ...目錄所在的路徑。您也可以傳遞目錄(v_1,v_2 ...)來代替父目錄路徑。例如:
#from inside the parent directory
rnm -fo -dp -1 -ns '/pd0/.txt' -ss '\.txt$' v_*
的情況下,似乎不夠好 – giskou
'$ subdir'應該是'「$子目錄」' 和去除空文件夾 '找到。型d -empty -exec室射頻\ {\} \;' – giskou
@giskou如果你喜歡打字。一個單獨的#/ file ##'重命名可以更容易輸入,並且處於正確的抽象級別。重複相同的shell循環來重命名文件變得老舊。 – tchrist