web-dev-qa-db-ja.com

特定のファイル拡張子を持つすべてのファイルをサブディレクトリから単一のディレクトリに移動する方法

多くのサブディレクトリを含むディレクトリがあります。サブディレクトリには、さまざまなファイル拡張子を持つ多くの種類のファイルが含まれています。 1つのタイプのすべてのファイルを新しいディレクトリに移動したい(コピーではない)。これらすべてのファイルが同じディレクトリにある必要があります。つまり、フラットである必要があります。

(私の使用例は、*。epubと呼ばれる電子ブックを多くのディレクトリからEPUBリーダーが見つけられる単一のフォルダに移動したい場合です。)

5
johntait.org

Zshでは、再帰グロブを使用できます。

mkdir ~/epubs
mv -- **/*.epub ~/epubs/

Bash≥4では、shopt -s globstar(これを~/.bashrcに入れることができます)を実行してから、上記のコマンドを実行します。 kshでは、最初にset -o globstarを実行します。

POSIXツールのみを使用して、findを実行します。

find . -name '*.epub' -exec mv {} ~/epubs \;

これを試してください:

mkdir ../new_dir
find . -type f -name '*.epub' -exec mv {} ../new_dir/ \;

すべてのファイルの名前がname.epub、次に、このように変数をインクリメントする必要があります( bash を使用)

mkdir ../new_dir
find . -type f -name '*.epub' |
    while read a; do
        ((c++))
        base="${a##*/}"
        mv "$a" "../new_dir/${base%.epub}_$(printf %.03d $c).epub"
    done
4
Gilles Quenot

Linuxでbashを使用する:

shopt -s nullglob globstar
mv -t ~/epub_directory ~/big_dir/**/*.epub
3
glenn jackman