shelljs cp复制./所有文件, 并排除node_modules src/views
时间: 2024-09-30 16:07:27 浏览: 13
ShellJS是一个Node.js库,用于在脚本中模拟shell命令。如果你想要使用ShellJS的`cp`方法复制`./`目录下的所有文件,但需要排除`node_modules`和`src/views`这两个文件夹,你可以这样做:
```javascript
const shell = require('shelljs');
// 获取当前目录下所有的文件和目录,除了node_modules和src/views
let files = shell.ls('.', { dot: true }).filter(file => {
return !file.match(/^(node_modules|src\/views)$/i);
});
// 遍历文件列表并复制到目标位置(这里假设目标是当前目录)
files.forEach(file => {
shell.cp('-r', file, './');
});
```
这段代码首先获取了当前目录下的所有项,包括隐藏文件(通过`{ dot: true }`),然后过滤掉匹配`node_modules`和`src/views`模式的项。最后,对剩下的每个文件使用`cp`命令复制到当前目录。
相关问题
cp: cannot overwrite non-directory 'obj/kernel/liteos_a/apps/toybox/toybox_build/toybox' with directory '../../../third_party/toybox'
This error occurs because you are trying to copy a directory (../../../third_party/toybox) over a file (obj/kernel/liteos_a/apps/toybox/toybox_build/toybox).
To fix this error, you should remove the existing file first using the command:
```
rm obj/kernel/liteos_a/apps/toybox/toybox_build/toybox
```
Then, you can copy the directory over using the command:
```
cp -r ../../../third_party/toybox obj/kernel/liteos_a/apps/toybox/toybox_build/toybox
```
The -r option tells the cp command to copy the directory and its contents recursively.
#!/bin/bash #date=$(date +%Y%m%d-%H:%M:%S) date=$(date +%Y%m%d) loadbindir="A66.ZXT.ZT1028.MT8766.32+3.EU.13.0.V001.$date" # load bin file to current build dir cd $PWD rm -rf ./$loadbindir mkdir $loadbindir cd t0/out/target/product/tb8766p1_64_bsp/merged cp preloader_tb8766p1_64_bsp.bin logo.bin md1img.img spmfw.img sspm.img lk.img boot.img dtbo.img tee.img vbmeta.img vbmeta_system.img vbmeta_vendor.img super.img userdata.img MT6761_Android_scatter.txt ../../../../../../$loadbindir find -name "APDB_MT6761_S01__W2*" |xargs -I{} cp {} ../../../../../../$loadbindir find ../../../../../../s0/vendor/mediatek/proprietary/modem/A66_B2B4B5_B2B4B5B7B12B13B14B17B66B71/ -name "MDDB.META_MT6761_S00_MOLY_LR12A_R3*" |xargs -I{} cp {} ../../../../../../$loadbindir帮我解释一下这段shell脚本越详细越好
这段 Shell 脚本主要是用来将一些文件从当前目录复制到指定的目录,并创建一个新的目录用于存储这些文件。下面是脚本中各部分的详细解释:
1. `#!/bin/bash`:这是指定脚本使用的解释器,这里使用的是 Bash。
2. `date=$(date +%Y%m%d)`:这一行获取当前日期,并将其保存到变量 `date` 中。日期格式为年月日。
3. `loadbindir="A66.ZXT.ZT1028.MT8766.32+3.EU.13.0.V001.$date"`:这一行将日期变量添加到一个字符串中,用于创建新目录的名称。
4. `cd $PWD`:将当前工作目录切换到脚本所在的目录。
5. `rm -rf ./$loadbindir`:如果已经存在同名的目录,则删除该目录及其所有内容。
6. `mkdir $loadbindir`:创建一个新目录,名称为上面定义的变量 `loadbindir`。
7. `cd t0/out/target/product/tb8766p1_64_bsp/merged`:将当前工作目录切换到 `t0/out/target/product/tb8766p1_64_bsp/merged` 目录,该目录包含需要复制的文件。
8. `cp preloader_tb8766p1_64_bsp.bin logo.bin md1img.img spmfw.img sspm.img lk.img boot.img dtbo.img tee.img vbmeta.img vbmeta_system.img vbmeta_vendor.img super.img userdata.img MT6761_Android_scatter.txt ../../../../../../$loadbindir`:将指定的文件从当前目录复制到上面创建的新目录中。
9. `find -name "APDB_MT6761_S01__W2*" |xargs -I{} cp {} ../../../../../../$loadbindir`:在当前目录及其子目录中查找文件名以 "APDB_MT6761_S01__W2" 开头的文件,并将它们复制到上面创建的新目录中。
10. `find ../../../../../../s0/vendor/mediatek/proprietary/modem/A66_B2B4B5_B2B4B5B7B12B13B14B17B66B71/ -name "MDDB.META_MT6761_S00_MOLY_LR12A_R3*" |xargs -I{} cp {} ../../../../../../$loadbindir`:在指定目录及其子目录中查找文件名以 "MDDB.META_MT6761_S00_MOLY_LR12A_R3" 开头的文件,并将它们复制到上面创建的新目录中。
这样,脚本中的所有文件都被复制到了新目录中,以备后续使用。