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