将特定扩展名的所有文件复制到单独的文件夹中,保留文件夹结构(递归)

Copy all files of a particular extension into a separate folder, retaining folder structure (recursive)

简单任务:我有一个任意代码的嵌套文件夹,在任何特定文件夹中包含 CSS 个文件。我想要一个命令,将这些文件(并且仅那些文件)复制到一个新文件夹中,从而重现它们所在的相同文件夹结构。

shell 命令或节点命令都可以。

例如鉴于此:

src/folder1/file1.css
src/folder1/... other files...
src/folder2/subfolder/file2.css
src/folder2/subfolder/X/Y/Z/file.css
src/folder3/whatever.html
src/folder4/blah.html

该命令将生成以下内容:

dist/folder1/file1.css
dist/folder2/subfolder/file2.css
dist/folder2/subfolder/X/Y/Z/file.css

有什么想法吗?

希望对您有所帮助。

cd src && find . -name \*\.css -or -name \*\.html | while read src; do srcdir=$(echo "$src" | rev | cut -d'/' -f2- | rev); dstdir="../dist/$srcdir"; [ -d "$dstdir" ] || mkdir -p "$dstdir"; cp "$src" "../dist/$src"; done

您可以使用 rsync:

rsync -avm --include '*/' --include '*.css' --exclude '*' src/ dist
  • -a是存档模式:递归,保留属性,权限等
  • -m 是修剪:删除 .css 路径
  • 不需要的目录
  • -v 是详细日志记录