将文件从子目录移动到根文件夹的脚本

Mar*_*ola 1 linux bash

我有以下目录和子目录结构:

\n
eva tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1061\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 2022\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 09\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 21\n\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 a0e51f58-5057-4002-b4c4-d3fb870e9b3a.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1769\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 2022\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 08\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 30\n\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 e36d8e21-5184-489f-89b5-eb1fd5eba5f6.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1991\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 2022\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 09\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 16\n\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 1d0a4162-7e66-44c8-8b61-f3bc5dbdb107.json\n
Run Code Online (Sandbox Code Playgroud)\n

我需要将所有 .json 文件移至根文件夹eva

\n

预期输出:

\n
.\n\xe2\x94\x82a0e51f58-5057-4002-b4c4-d3fb870e9b3a.json\n\xe2\x94\x82e36d8e21-5184-489f-89b5-eb1fd5eba5f6.json\n\xe2\x94\x821d0a4162-7e66-44c8-8b61-f3bc5dbdb107.json\n\n
Run Code Online (Sandbox Code Playgroud)\n

我该如何使用 bash 来做到这一点?

\n

And*_*uib 5

您可以使用find . -type f -name '*.json' -exec mv {} . \;

  • find .搜索当前目录;
  • -type f所有类型的对象f(也称为文件);
  • -name '*.json'.json以;结尾的文件名
  • -exec [COMMAND]\;对于找到的每个文件,运行[COMMAND];
  • mv {} .,大括号{}代表找到的文件,命令mv将其复制到当前目录( .)

  • 更安全、更高效的版本是“find”。-type f -name "*.json" -exec mv -t 。'{}' +` 将从每个目录中的文件构建一个命令行,对一组文件调用 `mv`,而不是每个文件一次。(如果每个目录只有一个 .json 文件,这并不是一种改进) (3认同)