ディレクトリがあります/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)
すべての名前と一致します。.mp4
rest
shellオプションを使用するextglob
と、拡張ワイルドカードパターンを使用でき、bash
shelldotglob
オプションを使用すると、隠された名前と一致するシェルワイルドカードを使用できます。