我有一个目录,里面充满了各种文件,它们的名称不同(即,没有使用特定的模式命名),并且具有不同的扩展名,我想将每个文件放在以每个文件命名的新创建的子目录中。在Linux下从命令行完成此操作的最佳方法是什么?
这听起来有点令人困惑,让我举个例子:让我们在目录中调用随机文件./filename.ext
,我想将其放在名为的子目录中,./filename
以便有效地使新路径为./filename/filename.ext
。
我通过以下步骤进行了一些试验:
- 我已经在测试目录中创建了一些测试文件,从
file-1.txt
到file-9.txt
,for num in {1..9}; do touch file-$num.txt; done
- 我创建了一个目录,该目录以每个文件名命名
for name in $(eval ls | cut -b 1-6); do mkdir $name; done
- 我已经将源文件移到它们各自的目录中,
for name in $(eval ls | grep -e ".txt" | cut -b 1-6); do mv $name.txt $name/$name.txt; done
如您所见,此解决方案有效,但其巨大缺点在于,在这种情况下,它只能用于文件名长度较长且具有特定扩展名的文件。如果我有一些文件使用不同的名称和扩展名,那将毫无用处。cut
我想在这里使用命令不是理想的解决方案,但是目前我还没有发现任何更好的方法。
另外,在移动/重新命名文件时自动找到子目录的方法也很酷,而不必mkdir
以前使用(因此,当我ls
实际重命名时,我不必担心排除新创建的目录) ); 但最终这是第二个问题。