繁体   English   中英

Linux 命令行 - 列出所有包含 .js 文件的目录,并将目录及其内容复制到新文件夹

[英]Linux Command Line - list all directories containing .js files, and copy the directories and their contents to a new folder

这是我已经拥有的代码,用于查找并列出所有包含 .js 文件的目录(不包括 node_modules 目录)。

find . -name '*.js*' -printf "%h\n" | sort -u | grep -v node_modules

如您所见,列出这些目录是没有问题的。 但是,我不想列出目录,而是将它们(及其内容)复制到一个新文件夹中,最好在一行中复制而不运行任何类型的脚本。

任何帮助将非常感激!

最安全的方法是使用 NULL 作为分隔符来处理目录列表,以便正确处理带有空格(和其他奇数字符)的目录。

如果 output 看起来正确,请移除echo

“1线”

 find "/path/to/tld" -path "*node_modules*" -prune -o -name "*.js" -printf "%h\0" | \
    sort -uz | xargs -0 -I _ echo cp -a _ "/path/to/new/dir"

Bash 脚本

这需要 Bash 4 用于关联数组,它将过滤掉重复项。

#!/bin/bash

tld="/path/to/top/level/dir"
newdir="/path/to/new/dir"

unset dirHash;
declare -A dirHash

while read -r -d $'\0' dir; do
  (( ! dirHash["$dir"]++ )) && echo cp -a "$dir" "$newdir"
done < <(find "$tld" -path "*node_modules*" -prune -o -name "*.js" -printf "%h\0")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM