私はそれぞれファイルを含む多数のディレクトリを持っています。構造は次のとおりです。
.
├── 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
これだけ印刷実行されるコマンドを繰り返すので、誤字やその他の予期しない動作がある場合は修正できます。