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

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

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

(私のユースケースは、*.epubという名前の電子ブックを複数のディレクトリからEPUBリーダーが見つけることができる単一のフォルダに移動したいことです。)

答え1

zsh では再帰グローブを使用できます。

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

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

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

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

答え2

この試み:

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

すべてのファイルの名前が指定されている場合は、name.epub次の変数を増やす必要があります(使用して)

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

答え3

Linuxでbashを使用する:

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

関連情報