制作脚本根据文件名创建子目录并将匹配的文件移入其中

制作脚本根据文件名创建子目录并将匹配的文件移入其中

一个文件夹里有大量的文件;每对文件具有相同的名称但不同的扩展名(.obj 和 .mtl)。我想为每对具有相同名称的文件创建一个文件夹,然后将每对文件移动到其匹配的文件夹中。文件名始终包含字母;有些还带有下划线和数字。

我需要做的是:
A)读取文件名
B)创建一个与前一个文件同名的子目录
C)将与文件名匹配的一对文件移动到匹配的子目录中
D)对下一个文件重复

示例:
文件:Big_Column1.obj 、 Big_Column1.mtl
要移动到子目录:Big_Column1

答案1

测试并运行良好

找出所有文件名并将具有相同名称但具有不同扩展名的文件名分开并整理和创建目录并将文件移动到同名目录

在下面的示例中,创建了 Big_Column1、Big_Column2 目录

for i in `ls -ltrh directorypath| awk '{print $NF}'| awk -F "." '{print $1}'| sort| uniq`; do mkdir $i; yes|cp  $i* $i; done

Before

praveen_linux_example pravee]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column1.mtl
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column1.obj
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column2.mtl
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column2.obj


command:n_linux_example pravee]# for i in `ls -ltrh | awk '{print $NF}'| awk -F "." '{print $1}'| sort| uniq`; do mkdir $i; yes|cp  $i* $i; done

After executing below is the output of ls -ltr

drwxr-xr-x. 2 root root 4096 Nov 30 22:39 Big_Column1
-rw-r--r--. 1 root root    0 Nov 30 22:38 Big_Column1.mtl
-rw-r--r--. 1 root root    0 Nov 30 22:38 Big_Column1.obj
drwxr-xr-x. 2 root root 4096 Nov 30 22:39 Big_Column2
-rw-r--r--. 1 root root    0 Nov 30 22:38 Big_Column2.mtl
-rw-r--r--. 1 root root    0 Nov 30 22:38 Big_Column2.obj

答案2

这是完成此任务的快速说明。我们只需使用 shell 通配符迭代当前目录中的所有文件(假设它们是您想要的文件),使用句点之前的文件名创建一个目录,使用cut修改名称(mkdir -p如果目录已存在,则不会出错),并将文件移动到那里。其实没什么。

for file in *; do dir=$(echo $file | cut -d. -f1); mkdir -p $dir; mv $file $dir; done

相关内容