将所有文件移动到自己的文件夹

Aga*_*rax 4 linux files shell-scripting

在 linux 机器上有什么方法可以将目录中的每个文件移动到它们自己的子目录中(即创建一个以它命名的目录并将其移入)?

Edu*_*nec 7

试试这个片段,假设你在当前目录中只有文件(没有目录):

for file in *
do
  mv "$file" "$file".tmp &&
  mkdir "$file" &&
  mv "$file".tmp "$file"/"$file"
done
Run Code Online (Sandbox Code Playgroud)

否则(仅轻微测试):

find . -maxdepth 1 -type f -exec mv '{}' '{}'.tmp \; -exec mkdir '{}' \; -exec mv '{}'.tmp '{}'/'{}' \;
Run Code Online (Sandbox Code Playgroud)

这在我的测试目录中使用了几个任意命名的文件,其中一些文件带有空格。

  • 您需要将变量替换用双引号括起来,否则如果任何文件名包含空格或通配符,您的代码段就会出错。你不能在你的第二个片段中使用`find`来做到这一点;你需要使用`find ... -exec`。 (3认同)