すべての拡張子を持つファイルをサブディレクトリに移動するには?

すべての拡張子を持つファイルをサブディレクトリに移動するには?

ディレクトリがあります/media/home/Seagate Expansion Drive/Downloads/Java Spring Gurus/folder1 .../folder2 .../foldern

*.mp4各ディレクトリには、さまざまな種類(*.srt, *.pdfなど)のファイルと追加ファイルがあります。*.mp4その中にすべてを保存し、別のファイルを作成しfolderxて移動したいと思います。folderx/rest/

どうすればいいですか?

私は試した:

for files in $(find "/media/sergio/Seagate Expansion Drive/DOWNS/Spring Framework 5"  | grep -P "([.]srt$)|([.]pdf$)")
do
  mv $files /resto
done

しかし、私はエラーがたくさんあります。

mv:数え切れない

ベストアンサー1

find私はこれを実際に使用するのを見ませんでした。すべてがどこにあるかを正確に知ることができるので、ファイルを見つける必要はありません。

bash代わりにシェルを使用すると仮定すると、

#!/bin/bash

shopt -s extglob dotglob

for dirpath in '/media/home/Seagate Expansion Drive/Downloads/Java Spring Gurus'/folder*/
do
    mkdir -p "$dirpath"/rest &&
    mv -i "$dirpath"/!(*.mp4|rest) "$dirpath"/rest
done

これはすべてのディレクトリを繰り返しますfolder*。これらの各ディレクトリに対してrestその中にサブディレクトリを作成し、一致しないすべてのエントリ*.mp4(またはrestディレクトリ自体)をそのディレクトリに移動します。

拡張ワイルドカードパターンは、およびnotで終わらない!(*.mp4|rest)すべての名前と一致します。.mp4rest

shellオプションを使用するextglobと、拡張ワイルドカードパターンを使用でき、bashshelldotglobオプションを使用すると、隠された名前と一致するシェルワイルドカードを使用できます。

おすすめ記事