各サブディレクトリの固有ファイルを外部に移動し、名前をディレクトリ名に変更するにはどうすればよいですか?

各サブディレクトリの固有ファイルを外部に移動し、名前をディレクトリ名に変更するにはどうすればよいですか?

私はそれぞれファイルを含む多数のディレクトリを持っています。構造は次のとおりです。

.
├── 1.apple
│   └── foo.txt
├── 10.banana
│   └── foo.txt
├── 101.orange
│   └── foo.txt
├── <number>.<different strings>
│   └── <same strings>

これらの個々のファイルを1つ上のレベルに移動し、現在存在するサブディレクトリの名前を反映するように名前を変更してから、そのサブディレクトリを削除したいと思います。結果は次のようになります。

.
├── 1.apple.txt
├── 10.banana.txt
├── 101.orange.txt

正規表現を使用すると操作を実行できますが、awk作成方法がわかりません。

答え1

コマンドプロンプトで「1行」として入力できる単純なシェルループを使用してこれを実行できます。

for d in */; do n="${d%/}".txt; mv "${d}foo.txt" "$n"; rmdir "$d"; done

これは、すべてのサブディレクトリ(つまり、パターンと一致する現在のディレクトリのエントリ*/)に対して繰り返されます。

  • .txt末尾のディレクトリ名を削除するプロセスに追加して新しいファイル名を生成します()。$d/${d%/}
  • ディレクトリ内のファイルを新しい名前で現在のディレクトリに移動します$n
  • $d最後に、現在空のディレクトリを削除します。

安全上の理由からまず、次のことを試してみてください。

for d in */; do n="${d%/}".txt; echo "mv ${d}foo.txt $n; rmdir $d"; done

これだけ印刷実行されるコマンドを繰り返すので、誤字やその他の予期しない動作がある場合は修正できます。

関連情報