0

私が持っている

  • フォルダ-A
    • フォルダ-A1(<-その中のファイル)
    • フォルダ-A2(<-その中のファイル)
  • フォルダ-B
    • フォルダ-B1(<-その中のファイル)
    • フォルダ-B2(<-その中のファイル)

私が欲しいもの

  • フォルダ-A
    • フォルダ-A1
      • フォルダー-A1-サブフォルダー(<-ファイルを移動しました)
    • フォルダー-A2
      • フォルダー-A2-サブフォルダー(<-ファイルを移動しました)
  • フォルダ-B
    • フォルダ-B1
      • フォルダ-B1-サブフォルダ(<-ファイルを移動しました)
    • フォルダ-b2
      • フォルダ-B2-サブフォルダ(<-ファイルを移動しました)

最初は複雑に見えます。しかし、私がやりたいのは、すべてのフォルダー内のファイルを同じフォルダー内の1つ下のフォルダーに移動することだけです(サブフォルダーを作成する必要があります。親フォルダーの名前が含まれている場合は素晴らしいです)。

bashコマンドでそれを行う方法はありますか?またはアプリ?あなたが私のためにいくつかのヒントを持っていることを願っています:-)

4

1 に答える 1

2

これは、findを使用したbashワンライナーで実行できます(これを簡単/小さくすることはおそらく可能ですが、私はシェルの第一人者ではありません):

find . -type f -exec bash -c 'mv {} $(dirname {})/$(basename $(dirname {}))-Subfolder/$(basename {})' \;`

(ディレクトリ以外のファイルをすべて検索し、元の位置から'foldername / foldername-Subfolder / filename'に移動します。bash -cサブシェルが最初に評価されるため、これを行う必要があります)

コマンドを実行する前にサブフォルダーを作成する必要があります。これは、別の検索で実行できます。

find . -type d ! -iname "*-Subfolder" -exec bash -c 'mkdir {}/$(basename {})-Subfolder' \;
于 2012-08-22T11:00:35.433 に答える