跨多个目录移动文件夹结构

跨多个目录移动文件夹结构

我正在尝试一次移动一堆文件,向上移动一个目录。

这是我尝试过的,但没有成功:

mv ./*/__test__/index.js ./*/data.js

.
├── alpha
│   ├── __test__
│   │   └── index.js
│   ├── index.js
│   └── test.js
└── beta
    ├── __test__
    │   └── index.js
    ├── index.js
    └── test.js

对此:

.
├── alpha
│   ├── data.js
│   ├── index.js
│   └── test.js
└── beta
    ├── data.js
    ├── index.js
    └── test.js

我怎样才能在unix中做到这一点?

答案1

您不能在目标参数中使用通配符。所以至少需要一些脚本:

for d in *; do
    if [[ -d "$d" ]]; then
        pushd "$d"
        mv __test__/index.js ./data.js
        popd
    fi
done

答案2

这是一个移动文件的示例。

for f in $(find -name index.js | grep __test__ ); do echo $f; destination=$(echo $f | awk 'BEGIN{FS="/"} {print $2}'); mv ${f} ./$destination/data.js; done

我已经对此进行了测试,它确实按预期执行了移动。

答案3

find . -path '*/__test__/*' -type f -name "index.js" \ 
    -execdir echo mv -vt ../data.js {} \;

删除echo用于空运行以mv在文件上运行命令的内容。

答案4

删除echos 才能真正改变。

for i in */__test__/index.js; do
    echo mv -v "$i" "${i%%/*}/data.js"
    echo rm -vr "${i%/*}"
done

.
├── alpha
│   ├── index.js
│   ├── __test__
│   │   └── index.js
│   └── test.js
└── beta
    ├── index.js
    ├── __test__
    │   └── index.js
    └── test.js

.
├── alpha
│   ├── data.js
│   ├── index.js
│   └── test.js
└── beta
    ├── data.js
    ├── index.js
    └── test.js

相关内容