如何从多个子文件夹中查找文件并将其复制到其父文件夹中
how to find and copy files from many sub folders into it's parent folder
我有三个级别的文件夹,例如 main、sub-1 和 sub-2.我的主文件夹有很多 sub-1 文件夹,每个 sub-1 都有很多 sub-2 文件夹,里面有 JPG 图片。
我正在尝试从 sub-2 中查找 JPG 文件并将其复制到其父 sub-1 文件夹中 FROM 主文件夹。
所以我目前的解决方案是转到每个 sub-1 文件夹并使用此脚本查找所有 JPG 并将其从 sub-2 文件夹复制到其父 sub-1 文件夹中。
find . -type f -name "*.jpg" -exec cp {} ./ \;
为什么下面这个脚本不起作用?如何在不进入每个子 1 文件夹的情况下从主文件夹中查找和复制 JPG?
更新
我试过这个脚本:
find . -type f -name "*.jpg" -exec cp {} ../ \;
但这会将所有图像带到主文件夹而不是子 1 文件夹。
..
指的是你当前工作目录的父目录。
要从末尾剥离一层目录结构,请尝试
find . -type f -name "*.jpg" -exec sh -c 'for p; do
cp "$p" "${p%/*/*}"
done' _ {} +
parameter expansion ${p%pattern}
生成 p
的值,并从其末尾删除 pattern
上的最短可能匹配(或简单地 returns模式不匹配时的原始值)。
因为在设置文件名时需要计算参数扩展,所以我们将其包装在 sh -c '...'
中,为了提高效率,我们将操作包装在 for
循环中,以便 find
可以将多个文件传递给单个 shell 调用(因此最后是 +
而不是 \;
)。
_
只是一个占位符,它被分配给 [=22=]
,在这里根本没有使用。
在不太一般的情况下,如果你只有一个目标文件夹,你可以直接硬编码,当然:
find . -type f -name "*.jpg" -exec cp -t sub-1 {} +
不幸的是,cp -t
是一个 GNU 扩展;如果您的 OS 没有,您必须重新组织为与上述命令更相似的内容。
我有三个级别的文件夹,例如 main、sub-1 和 sub-2.我的主文件夹有很多 sub-1 文件夹,每个 sub-1 都有很多 sub-2 文件夹,里面有 JPG 图片。
我正在尝试从 sub-2 中查找 JPG 文件并将其复制到其父 sub-1 文件夹中 FROM 主文件夹。
所以我目前的解决方案是转到每个 sub-1 文件夹并使用此脚本查找所有 JPG 并将其从 sub-2 文件夹复制到其父 sub-1 文件夹中。
find . -type f -name "*.jpg" -exec cp {} ./ \;
为什么下面这个脚本不起作用?如何在不进入每个子 1 文件夹的情况下从主文件夹中查找和复制 JPG?
更新 我试过这个脚本:
find . -type f -name "*.jpg" -exec cp {} ../ \;
但这会将所有图像带到主文件夹而不是子 1 文件夹。
..
指的是你当前工作目录的父目录。
要从末尾剥离一层目录结构,请尝试
find . -type f -name "*.jpg" -exec sh -c 'for p; do
cp "$p" "${p%/*/*}"
done' _ {} +
parameter expansion ${p%pattern}
生成 p
的值,并从其末尾删除 pattern
上的最短可能匹配(或简单地 returns模式不匹配时的原始值)。
因为在设置文件名时需要计算参数扩展,所以我们将其包装在 sh -c '...'
中,为了提高效率,我们将操作包装在 for
循环中,以便 find
可以将多个文件传递给单个 shell 调用(因此最后是 +
而不是 \;
)。
_
只是一个占位符,它被分配给 [=22=]
,在这里根本没有使用。
在不太一般的情况下,如果你只有一个目标文件夹,你可以直接硬编码,当然:
find . -type f -name "*.jpg" -exec cp -t sub-1 {} +
不幸的是,cp -t
是一个 GNU 扩展;如果您的 OS 没有,您必须重新组织为与上述命令更相似的内容。