私はこのようなものを持っています:
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
が、フォルダーとファイルの名前変更を同時に使用する方法がわかりません。
結果は、bashforループとmv
:で実現できます。
for subdir in *; do mv $subdir/file.txt $subdir.txt; done;
ディレクトリ名にスペースが含まれている場合、上記の解決策は機能しないことに注意してください。関連リンク。
コメントに基づく別の解決策(名前にスペースが含まれるディレクトリでも機能します):
find . -type d -not -empty -exec echo mv \{\}/file.txt \{\}.txt \;
私にはかなり簡単に思えます:
$ 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