微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改所有文件的名称和扩展名并在 linux 中对它们进行分组

如何解决更改所有文件的名称和扩展名并在 linux 中对它们进行分组

在此代码中,我从用户那里获取文件夹的路径,然后输入该路径。
之后,我更改所有文件名称和扩展名,无论它们的名称或扩展名是什么。
我将它们的名称更改为“pic”,计数器从 1 开始直到最后一个文件(以计算有多少文件),并将它们的扩展名更改为 jpg(例如)。

#!/bin/bash

echo "Enter Folder's Path :"
read path
cd $path

c=0
for file in *.*;do
mv "$file" "pic $((c=c+1)).jpg"
done

现在帮我为每(例如)10 个文件创建一个目录,并将这些文件(从 1 到 10、11 到 20 和...)移动到该特定目录。

解决方法

使用 mapfile 又名 readarray,这是一个 bash4+ 功能。

#!/usr/bin/env bash

read -rp "Enter Folder's Path : " path
cd "$path" || exit

n=1
c=0

files=(*.*)

while mapfile -n10 -d '' -t array && ((${#array[*]})); do
  mkdir -pv "directory$n" || exit
  for file in "${array[@]}"; do
    mv -v "$file" "directory$n/pic$c.jpg" || exit
    ((c++))
  done
  ((n++))
done < <(printf '%s\0' "${files[@]}")

上面的脚本将执行以下操作:

  • 它将使用所需的命名方案以增量重命名文件。

  • 它将创建一个具有所需命名方案的目录,并带有增量

  • 将每个目录中的文件移动 10 对。

  • 如果还有剩余文件(少于 10 个),这些文件将放在最后一个目录中。就像您有 105 个文件一样,剩余的 5 个文件将进入 directory11 目录中的其余文件,每个目录成对出现在目录 1 到 10 中。

应该启用 nullglob shopt -s nullglob

还应添加检查目录是否为空。

还要检查您是否也在重命名目录。


脚本如何工作的示例。

首先在某处创建一些虚拟文件,比如 /tmp

[[ -d /tmp ]] && mkdir -p /tmp/testing/ && touch /tmp/testing/{1..21}.{pdf,csv,mp3,txt,rpm}

现在检查创建的虚拟文件。

ls /tmp/testing

输出

10.csv  11.csv  12.csv  13.csv  14.csv  15.csv  16.csv  17.csv  18.csv  19.csv  1.csv  20.csv  21.csv  2.csv  3.csv  4.csv  5.csv  6.csv  7.csv  8.csv  9.csv
10.mp3  11.mp3  12.mp3  13.mp3  14.mp3  15.mp3  16.mp3  17.mp3  18.mp3  19.mp3  1.mp3  20.mp3  21.mp3  2.mp3  3.mp3  4.mp3  5.mp3  6.mp3  7.mp3  8.mp3  9.mp3
10.pdf  11.pdf  12.pdf  13.pdf  14.pdf  15.pdf  16.pdf  17.pdf  18.pdf  19.pdf  1.pdf  20.pdf  21.pdf  2.pdf  3.pdf  4.pdf  5.pdf  6.pdf  7.pdf  8.pdf  9.pdf
10.rpm  11.rpm  12.rpm  13.rpm  14.rpm  15.rpm  16.rpm  17.rpm  18.rpm  19.rpm  1.rpm  20.rpm  21.rpm  2.rpm  3.rpm  4.rpm  5.rpm  6.rpm  7.rpm  8.rpm  9.rpm
10.txt  11.txt  12.txt  13.txt  14.txt  15.txt  16.txt  17.txt  18.txt  19.txt  1.txt  20.txt  21.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt

运行脚本。 (假设您的脚本名称是 myscript.sh 并且它在当前的 pwd 中)

bash ./myscript.sh

输出

 Enter Folder's Path :

键入包含虚拟文件的目录。

 Enter Folder's Path : /tmp/testing

输出

mkdir: created directory 'directory1'
renamed '10.csv' -> 'directory1/pic0.jpg'
renamed '10.mp3' -> 'directory1/pic1.jpg'
renamed '10.pdf' -> 'directory1/pic2.jpg'
renamed '10.rpm' -> 'directory1/pic3.jpg'
renamed '10.txt' -> 'directory1/pic4.jpg'
renamed '11.csv' -> 'directory1/pic5.jpg'
renamed '11.mp3' -> 'directory1/pic6.jpg'
renamed '11.pdf' -> 'directory1/pic7.jpg'
renamed '11.rpm' -> 'directory1/pic8.jpg'
renamed '11.txt' -> 'directory1/pic9.jpg'
mkdir: created directory 'directory2'
renamed '12.csv' -> 'directory2/pic10.jpg'
renamed '12.mp3' -> 'directory2/pic11.jpg'
renamed '12.pdf' -> 'directory2/pic12.jpg'
renamed '12.rpm' -> 'directory2/pic13.jpg'
renamed '12.txt' -> 'directory2/pic14.jpg'
renamed '13.csv' -> 'directory2/pic15.jpg'
renamed '13.mp3' -> 'directory2/pic16.jpg'
renamed '13.pdf' -> 'directory2/pic17.jpg'
renamed '13.rpm' -> 'directory2/pic18.jpg'
renamed '13.txt' -> 'directory2/pic19.jpg'
mkdir: created directory 'directory3'
renamed '14.csv' -> 'directory3/pic20.jpg'
renamed '14.mp3' -> 'directory3/pic21.jpg'
renamed '14.pdf' -> 'directory3/pic22.jpg'
renamed '14.rpm' -> 'directory3/pic23.jpg'
renamed '14.txt' -> 'directory3/pic24.jpg'
renamed '15.csv' -> 'directory3/pic25.jpg'
renamed '15.mp3' -> 'directory3/pic26.jpg'
renamed '15.pdf' -> 'directory3/pic27.jpg'
renamed '15.rpm' -> 'directory3/pic28.jpg'
renamed '15.txt' -> 'directory3/pic29.jpg'
mkdir: created directory 'directory4'
renamed '16.csv' -> 'directory4/pic30.jpg'
renamed '16.mp3' -> 'directory4/pic31.jpg'
renamed '16.pdf' -> 'directory4/pic32.jpg'
renamed '16.rpm' -> 'directory4/pic33.jpg'
renamed '16.txt' -> 'directory4/pic34.jpg'
renamed '17.csv' -> 'directory4/pic35.jpg'
renamed '17.mp3' -> 'directory4/pic36.jpg'
renamed '17.pdf' -> 'directory4/pic37.jpg'
renamed '17.rpm' -> 'directory4/pic38.jpg'
renamed '17.txt' -> 'directory4/pic39.jpg'
mkdir: created directory 'directory5'
renamed '18.csv' -> 'directory5/pic40.jpg'
renamed '18.mp3' -> 'directory5/pic41.jpg'
renamed '18.pdf' -> 'directory5/pic42.jpg'
renamed '18.rpm' -> 'directory5/pic43.jpg'
renamed '18.txt' -> 'directory5/pic44.jpg'
renamed '19.csv' -> 'directory5/pic45.jpg'
renamed '19.mp3' -> 'directory5/pic46.jpg'
renamed '19.pdf' -> 'directory5/pic47.jpg'
renamed '19.rpm' -> 'directory5/pic48.jpg'
renamed '19.txt' -> 'directory5/pic49.jpg'
mkdir: created directory 'directory6'
renamed '1.csv' -> 'directory6/pic50.jpg'
renamed '1.mp3' -> 'directory6/pic51.jpg'
renamed '1.pdf' -> 'directory6/pic52.jpg'
renamed '1.rpm' -> 'directory6/pic53.jpg'
renamed '1.txt' -> 'directory6/pic54.jpg'
renamed '20.csv' -> 'directory6/pic55.jpg'
renamed '20.mp3' -> 'directory6/pic56.jpg'
renamed '20.pdf' -> 'directory6/pic57.jpg'
renamed '20.rpm' -> 'directory6/pic58.jpg'
renamed '20.txt' -> 'directory6/pic59.jpg'
mkdir: created directory 'directory7'
renamed '21.csv' -> 'directory7/pic60.jpg'
renamed '21.mp3' -> 'directory7/pic61.jpg'
renamed '21.pdf' -> 'directory7/pic62.jpg'
renamed '21.rpm' -> 'directory7/pic63.jpg'
renamed '21.txt' -> 'directory7/pic64.jpg'
renamed '2.csv' -> 'directory7/pic65.jpg'
renamed '2.mp3' -> 'directory7/pic66.jpg'
renamed '2.pdf' -> 'directory7/pic67.jpg'
renamed '2.rpm' -> 'directory7/pic68.jpg'
renamed '2.txt' -> 'directory7/pic69.jpg'
mkdir: created directory 'directory8'
renamed '3.csv' -> 'directory8/pic70.jpg'
renamed '3.mp3' -> 'directory8/pic71.jpg'
renamed '3.pdf' -> 'directory8/pic72.jpg'
renamed '3.rpm' -> 'directory8/pic73.jpg'
renamed '3.txt' -> 'directory8/pic74.jpg'
renamed '4.csv' -> 'directory8/pic75.jpg'
renamed '4.mp3' -> 'directory8/pic76.jpg'
renamed '4.pdf' -> 'directory8/pic77.jpg'
renamed '4.rpm' -> 'directory8/pic78.jpg'
renamed '4.txt' -> 'directory8/pic79.jpg'
mkdir: created directory 'directory9'
renamed '5.csv' -> 'directory9/pic80.jpg'
renamed '5.mp3' -> 'directory9/pic81.jpg'
renamed '5.pdf' -> 'directory9/pic82.jpg'
renamed '5.rpm' -> 'directory9/pic83.jpg'
renamed '5.txt' -> 'directory9/pic84.jpg'
renamed '6.csv' -> 'directory9/pic85.jpg'
renamed '6.mp3' -> 'directory9/pic86.jpg'
renamed '6.pdf' -> 'directory9/pic87.jpg'
renamed '6.rpm' -> 'directory9/pic88.jpg'
renamed '6.txt' -> 'directory9/pic89.jpg'
mkdir: created directory 'directory10'
renamed '7.csv' -> 'directory10/pic90.jpg'
renamed '7.mp3' -> 'directory10/pic91.jpg'
renamed '7.pdf' -> 'directory10/pic92.jpg'
renamed '7.rpm' -> 'directory10/pic93.jpg'
renamed '7.txt' -> 'directory10/pic94.jpg'
renamed '8.csv' -> 'directory10/pic95.jpg'
renamed '8.mp3' -> 'directory10/pic96.jpg'
renamed '8.pdf' -> 'directory10/pic97.jpg'
renamed '8.rpm' -> 'directory10/pic98.jpg'
renamed '8.txt' -> 'directory10/pic99.jpg'
mkdir: created directory 'directory11'
renamed '9.csv' -> 'directory11/pic100.jpg'
renamed '9.mp3' -> 'directory11/pic101.jpg'
renamed '9.pdf' -> 'directory11/pic102.jpg'
renamed '9.rpm' -> 'directory11/pic103.jpg'
renamed '9.txt' -> 'directory11/pic104.jpg'

检查其目录中的文件。

ls /tmp/testing/directory[0-9]*/

输出

/tmp/testing/directory1/:
pic0.jpg  pic1.jpg  pic2.jpg  pic3.jpg  pic4.jpg  pic5.jpg  pic6.jpg  pic7.jpg  pic8.jpg  pic9.jpg

/tmp/testing/directory10/:
pic90.jpg  pic91.jpg  pic92.jpg  pic93.jpg  pic94.jpg  pic95.jpg  pic96.jpg  pic97.jpg  pic98.jpg  pic99.jpg

/tmp/testing/directory11/:
pic100.jpg  pic101.jpg  pic102.jpg  pic103.jpg  pic104.jpg

/tmp/testing/directory2/:
pic10.jpg  pic11.jpg  pic12.jpg  pic13.jpg  pic14.jpg  pic15.jpg  pic16.jpg  pic17.jpg  pic18.jpg  pic19.jpg

/tmp/testing/directory3/:
pic20.jpg  pic21.jpg  pic22.jpg  pic23.jpg  pic24.jpg  pic25.jpg  pic26.jpg  pic27.jpg  pic28.jpg  pic29.jpg

/tmp/testing/directory4/:
pic30.jpg  pic31.jpg  pic32.jpg  pic33.jpg  pic34.jpg  pic35.jpg  pic36.jpg  pic37.jpg  pic38.jpg  pic39.jpg

/tmp/testing/directory5/:
pic40.jpg  pic41.jpg  pic42.jpg  pic43.jpg  pic44.jpg  pic45.jpg  pic46.jpg  pic47.jpg  pic48.jpg  pic49.jpg

/tmp/testing/directory6/:
pic50.jpg  pic51.jpg  pic52.jpg  pic53.jpg  pic54.jpg  pic55.jpg  pic56.jpg  pic57.jpg  pic58.jpg  pic59.jpg

/tmp/testing/directory7/:
pic60.jpg  pic61.jpg  pic62.jpg  pic63.jpg  pic64.jpg  pic65.jpg  pic66.jpg  pic67.jpg  pic68.jpg  pic69.jpg

/tmp/testing/directory8/:
pic70.jpg  pic71.jpg  pic72.jpg  pic73.jpg  pic74.jpg  pic75.jpg  pic76.jpg  pic77.jpg  pic78.jpg  pic79.jpg

/tmp/testing/directory9/:
pic80.jpg  pic81.jpg  pic82.jpg  pic83.jpg  pic84.jpg  pic85.jpg  pic86.jpg  pic87.jpg  pic88.jpg  pic89.jpg
,

我认为这就是您所需要的。

COUNT=0
find test -name "pic_*.jpg"|tr -s '_' '.'|awk -F'.' '{print $(NF-2),$(NF-1),$(NF)}'|sort -nk 2|awk '{print $1"_"$2"."$3}'|while read line;do
        echo $line
        COUNT=$((COUNT+1))
        echo $COUNT
        DIR=$(($COUNT / 10 + 1))
        echo $DIR
        mkdir -p dir$DIR
        mv $line dir$DIR
done

取决于:

所有保存在test目录下并命名为pic_xxx.jpg的文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?