【发布时间】:2021-09-26 05:50:12
【问题描述】:
我有一个名为 p/ 的文件夹,在 p/ 中有几个子文件夹,如下所示:
$[~/p] ls
a/ b/ c/
a/ b/ 和 c/ 每个也有多个子文件夹。 我试图在 p/ 的每个文件夹和子文件夹中找到与特定模式匹配的文件,并将它们移动到新目录中相应的 a/、b/ 和 c/ 文件夹中。 因此,a/ 将有一个名为 x/ 的新子文件夹,并将所有在 a/ 中找到的匹配文件移动到 x/ 中,b/ 将有一个名为 x/ 的新子文件夹,并将所有找到的匹配文件移动到 x/ 中在 b/ 等等。
我试过了:
pth=path/to/p
for dir in ${pth}/*; do
mkdir -- "$dir/x";
find . -name '*match*' -exec mv -t ./x '{}' +;
done
但是它不起作用,它将 x/ 子文件夹变为 a/、b/ 和 c/,但它没有移动任何东西。
我明白了:
mv: 无法访问 './x': 没有这样的文件或目录
我做错了什么??你能帮帮我吗?
编辑: 这是文件夹结构的示例:
p/
-a/
--t/
--q/
--p/
-- files-to-match
--f/
--qd/
--pe/
-- files-to-match
--d/
--qu/
--ip/
-- files-to-match
文件夹 b 和 c 以及我拥有的其他文件夹也是如此。子文件夹的名称并不总是相同的。
@ikegami 提供给我的代码正在运行,但文件夹 x/ 的位置以“匹配文件”的同一级别结束,但我希望它位于第一级,即在同一级别 t/、f/ 和 d/(对于本示例)。
所以最终的结构是:
p/
-a/
--t/
--q/
--p/
--
--f/
--qd/
--pe/
--
--d/
--qu/
--ip/
--
--x/
--matched-files
【问题讨论】:
标签: linux bash command-line terminal