複数のディレクトリにわたってフォルダ構造を移動する

複数のディレクトリにわたってフォルダ構造を移動する

一度に複数のファイルを1つのディレクトリに移動しようとしています。

私が成功せずに試したことは次のとおりです。

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

sを削除するとecho実際に変わることがあります。

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

関連情報