18

私はこのようなものを持っています:

v_1/file.txt
v_2/file.txt
v_3/file.txt
...

これらのファイルの名前を次のように変更したいと思います。

v_1.txt
v_2.txt
v_3.txt
...

同じディレクトリにあります。

使用できると思いますrenameが、フォルダーとファイルの名前変更を同時に使用する方法がわかりません。

4

3 に答える 3

33

結果は、bashforループとmv:で実現できます。

for subdir in *; do mv $subdir/file.txt $subdir.txt; done;

ディレクトリ名にスペースが含まれている場合、上記の解決策は機能しないことに注意してください。関連リンク

コメントに基づく別の解決策(名前にスペースが含まれるディレクトリでも機能します):

find . -type d -not -empty -exec echo mv \{\}/file.txt \{\}.txt \;
于 2013-01-13T17:35:08.967 に答える
0

私にはかなり簡単に思えます:

$ 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
于 2013-01-13T17:32:35.440 に答える