一个文件夹里有大量的文件;每对文件具有相同的名称但不同的扩展名(.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