在多个目录中的文件重命名为目录名(Rename files in multiple director

2019-07-18 04:38发布

我有这样的事情:

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

我想这些文件重命名为这样的事情:

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

在同一目录下。

我想我可以使用rename ,但我无法弄清楚如何使用文件夹和文件,同时重命名使用它。

Answer 1:

结果可以与环和一个bash实现mv

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

请注意,如果目录名中包含空格上述解决方案将无法工作。 相关链接 。

根据意见(即具有在命名空间以及目录的作品)另一种解决方案:

find . -type d -not -empty -exec echo mv \{\}/file.txt \{\}.txt \;


Answer 2:

您可以使用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_* 


Answer 3:

似乎很简单的对我说:

$ 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


文章来源: Rename files in multiple directories to the name of the directory