2017-05-11 7 views
3

私はAIX上でkshを使用しています。私のディレクトリ構造は以下の通りです。すべてのサブディレクトリを削除するが、それらのファイルを親ディレクトリに保存する方法は?

dir/ 
    subdir1/file1 
    subdir2/file2 
    subdir3/file3 

私は上のすべてのサブディレクトリsubdir1subdir2を削除したい、と。私はfile1file2などのファイルをdirに保存します。言い換えれば、私はsubdirsのすべてのファイルをdirに移動し、空のすべてsubdirsを削除したいと思います。結果は次のようになります。

dir/ 
    file1 
    file2 
    file3 
    .... 

どのようなコマンドを使用しますか?

答えて

2

最初にファイルを上に移動し、空のサブディレクトリを削除します。 dir/から:

mv subdir*/file* ./ && rmdir subdir*/ 

/後のディレクトリ名は、我々は、ディレクトリを扱っていることを示しています。ファイル/ディレクトリ名を一致させるために、?または[:digit:]を使用すると、より正確なグロブを得ることができます。

find ./dir -mindepth 2 -type f -exec mv {} ./dir/ \; 

これは./dirから始まり、./dirの最初のレベル以下のファイルを検索し、その後./dirにそれらのファイルを移動します。

+1

OPは空のディレクトリだけを削除する予定であるため、 'rmdir'は' rm -r'よりも優れています。したがって、 'mv subdir */file * ./ && rmdir subdir * /'です。 – codeforester

+1

@codeforesterええ、慎重に読んだことはありません...それは意味があり、編集されています。ありがとう。 – heemayl

3

私はちょうど任意のシェルで動作するはずfindコマンドを使用すると思います。空のサブディレクトリを削除するには

は、使用:

find ./dir -mindepth 1 -type d -empty -delete 

警告:これは、ファイル名の衝突がなければならない同じ名前のファイルが上書きされます。

関連する問題