私のメディアプレーヤーは、名前はまったく同じですが、拡張子が ".t"の新しいファイルを作成して(同じフォルダに)ビデオファイルを視聴したとマークします。たとえば、「SeinfeldS07E02.mp4」を見ると、「SeinfeldS07E02.mp4.t」というファイルが生成されます。
視聴したすべてのビデオファイルを自動的に別のフォルダに移動したいと思う最善の方法は、*.tファイルを探すシェルスクリプトを介して名前のベースとなる元のファイルを見つけて、そのファイルを別のフォルダに移動することだと思いました。フォルダ。 *.tファイルを見つけて移動する非常に単純なスクリプトがすでにありますが、範囲をさらに絞り込む方法がわかりません。これは可能ですか?
答え1
ファイル名にスペースが含まれているか、それ以上の深刻な問題が発生するのを防ぐために、以下から直接すべてを実行することをお勧めしますfind
。
find /PATH/TO/SOURCE -name '*.mp4' \
-exec sh -c '[ -e "$1.t" ]
&& mv -- "$1" /PATH/TO/TARGET
&& rm -- "$1.t"' _ {} \;
答え2
for i in $(find /path -type f -name "*.mp4.t") ;execute mv $(echo $i | sed "s/.mp4.t/.mp4/") /path/to/otherfolder /;完成した
私の考えでは、それだけで十分だと思います。
シミュレーションしてみてください。
[root@h2g2w ~]# mkdir {toto,titi}
[root@h2g2w ~]# touch toto/{a,b,a.t,b.t,c}
[root@h2g2w ~]# for i in $(find toto/ -type f -name "*.t") ; do mv $(echo $i | sed "s/\.t//") titi/ ; done
[root@h2g2w ~]# ls -l titi
total 0
-rw-r--r--. 1 root root 0 1 janv. 15:13 a
-rw-r--r--. 1 root root 0 1 janv. 15:13 b
[root@h2g2w ~]# rm -rf toto titi
[root@h2g2w ~]# #OK only a & b have moved