我有一堆目录,每个目录都有多个文件。
dir1
|- part1.txt
|- part2.txt . . .
dir2
|- part1.txt
|- part2.txt . . .
我想将内部文件(part1.txt
等)重命名为(dir1_part1.txt
)。如何在ubuntu中完成?
This question解释了如何添加或删除后缀前缀。但是如何将前缀添加为目录名?
答案 0 :(得分:1)
好的,这是一个简单的例子。
$ mkdir dir{1..5}
$ touch dir{1..5}/part{1..5}.txt
# the command above create the files for testing
# then do the rename action
$ for f in dir*/*;do mv -v $f $(dirname $f)/$(dirname $f)_$(basename $f);done
答案 1 :(得分:1)
使用bash
和parameter-expansion的简单find
脚本来查找目录名称。
#!/bin/bash
find . -name "*.csv" -type f -printf '%f\n' |
while read -r x; do
mv -v "$x" "${PWD##*/}_$x"
done
处理具有特殊字符的文件: -
要处理包含换行符或其他类型的空格或其他特殊字符的文件名,请使用-print0
中的find
并使用限制器''
阅读它们: -
再次使用参数扩展,从查找命令中删除前导字符./
。
#!/bin/bash
find . -name "*.csv" -type f -print0 |
while IFS= read -r -d '' x; do
x="${x:2}"
mv -v "$x" "${PWD##*/}_$x"
done
一个工作示例: -
[dude@csv_folder]$ ls *.csv
1.csv 2.csv 3.csv 4.csv
[dude@csv_folder]$ ./myScript.sh
`1.csv' -> `csv_folder_1.txt'
`2.csv' -> `csv_folder_2.txt'
`3.csv' -> `csv_folder_3.txt'
`4.csv' -> `csv_folder_4.txt'
答案 2 :(得分:1)
有一个名为perl-rename
的工具,有时称为rename
,不要与rename
from util-linux混淆。此工具采用perl表达式并重新命名:
perl-rename 's~/~_~' dir1/* dir2/*
以上内容会重命名并将dir1
和dir2
中的所有文件移至以下位置:
dir1/file1 -> dir1_file1
dir1/file2 -> dir1_file2
dir1/file3 -> dir1_file3