我有一个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个参数。
如果能够在移动所有文件后删除空文件夹,那也很好,但这不是必需的。
答案 0 :(得分:1)
我建议为此使用rsync。另外,我将使用其他位置的文件夹作为目的地。然后可以将该文件夹复制回您的公用文件夹。
mkdir /tmp/assets
rsync -r --include="*/" --exclude="*.html" --include="*" --prune-empty-dirs public/* /tmp/assets
mv /tmp/assets public/assets