如何将包含完整路径的文件移动到子文件夹?

问题描述 投票:-1回答:1

我有一个public文件夹,其根目录和子文件夹中包含.html和非.html文件。我需要将所有非.html文件移动到public文件夹的子文件夹,例如到public/assets,保留他们的完整路径。

到目前为止,我有这样的事情:

mkdir -p public/assets
find public -type f -not -name "*.html" -print0 | xargs -0I{} mv {} public/assets/

它无法正常工作,因为它不会移动具有完整路径的文件,例如如果有一个文件public/foo/bar.js,它将被移动到public/assets/bar.js而不是public/assets/foo/bar.js

我还尝试了另一个版本:

mkdir -p public/assets
find public -type f -not -name "*.html" | sed 's#\(public\)\(.*\)#\1\2 public/assets\2#' | xargs -I% mv %

但它抱怨mv命令的语法不正确。我只传递一个参数,但在运行sed后,它由2个路径分隔一个空格,所以我希望它将它视为2个参数。

如果有一种方法可以在移动所有文件后删除空文件夹,那也会很棒,但这不是必需的。

bash find xargs
1个回答
1
投票

我建议使用rsync。另外,我会使用不同位置的文件夹作为目的地。然后可以将该文件夹复制回公用文件夹。

mkdir /tmp/assets

rsync -r --include="*/" --exclude="*.html" --include="*" --prune-empty-dirs public/* /tmp/assets

mv /tmp/assets public/assets
© www.soinside.com 2019 - 2024. All rights reserved.