Dav*_*ill 55 linux bash shell grep
我有一个大约1,700个文件的文件夹.它们都被命名为1.txt或1497.txt等.我想重命名所有文件,以便所有文件名都是四位数.
即,23.txt成为0023.txt.
什么是shell脚本才能执行此操作?或者一个相关的问题:我如何使用grep只匹配包含的行\d.txt(即一个数字,然后一个句点,然后是字母txt)?
这是我到目前为止所拥有的:
for a in [command i need help with]
do
mv $a 000$a
done
Run Code Online (Sandbox Code Playgroud)
基本上,运行三次,使用命令找到一位数,两位数和三位数文件名(初始零的数量已更改).
Col*_*ert 50
尝试:
for a in [0-9]*.txt; do
mv $a `printf %04d.%s ${a%.*} ${a##*.}`
done
Run Code Online (Sandbox Code Playgroud)
[0-9]*.txt根据需要更改文件名模式().
通用枚举重命名,不对初始文件名集做出任何假设:
X=1;
for i in *.txt; do
mv $i $(printf %04d.%s ${X%.*} ${i##*.})
let X="$X+1"
done
Run Code Online (Sandbox Code Playgroud)
在同一主题上:
Pau*_*ce. 15
使用有时与Perl一起安装的rename(prename在某些情况下)脚本,您可以使用Perl表达式进行重命名.如果存在名称冲突,脚本将跳过重命名.
以下命令仅重命名具有四位或更少位数后跟".txt"扩展名的文件.它不会重命名不严格符合该模式的文件.它不会截断包含四位以上数字的名称.
rename 'unless (/0+[0-9]{4}.txt/) {s/^([0-9]{1,3}\.txt)$/000$1/g;s/0*([0-9]{4}\..*)/$1/}' *
Run Code Online (Sandbox Code Playgroud)
几个例子:
Original Becomes
1.txt 0001.txt
02.txt 0002.txt
123.txt 0123.txt
00000.txt 00000.txt
1.23.txt 1.23.txt
Run Code Online (Sandbox Code Playgroud)
到目前为止给出的其他答案将尝试重命名不符合模式的文件,为包含非数字字符的文件名产生错误,执行产生名称冲突的重命名,尝试重命名名称中包含空格的文件,可能还有其他问题
Chr*_*ung 12
for a in *.txt; do
b=$(printf %04d.txt ${a%.txt})
if [ $a != $b ]; then
mv $a $b
fi
done
Run Code Online (Sandbox Code Playgroud)
一内胆:
ls | awk '/^([0-9]+)\.txt$/ { printf("%s %04d.txt\n", $0, $1) }' | xargs -n2 mv
Run Code Online (Sandbox Code Playgroud)
如何使用grep仅匹配包含\ d.txt的行(IE 1位数,然后是句点,然后是字母txt)?
grep -E '^[0-9]\.txt$'
Run Code Online (Sandbox Code Playgroud)
假设您的文件夹中有数据类型为 .dat 的文件。只需将此代码复制到名为 run.sh 的文件中,通过运行使其可执行chmode +x run.sh,然后使用以下命令执行./run.sh:
#!/bin/bash
num=0
for i in *.dat
do
a=`printf "%05d" $num`
mv "$i" "filename_$a.dat"
let "num = $(($num + 1))"
done
Run Code Online (Sandbox Code Playgroud)
这会将文件夹中的所有文件转换为filename_00000.dat、filename_00001.dat等。
| 归档时间: |
|
| 查看次数: |
76816 次 |
| 最近记录: |