修正日順にjpgファイルを一覧表示し、xargsを使用して数値順(0.jpg、1.jpg、2.jpgなど)に名前を変更するbashスクリプトがあります。これは複数のディレクトリで発生する必要があります。コードは次のとおりです。
ls -1rt "/media/171/" | xargs rename 's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e'
ls -1rt "/media/193/" | xargs rename 's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e'
ls -1rt "/media/211/" | xargs rename 's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e'
問題は、スクリプトを実行するとファイルが正しく一覧表示されますが、xargsで指定されたファイルが見つからないというエラーが発生することです。各ディレクトリでコマンドを実行する場合にのみ機能します。 Bashスクリプトでは "cd /"を実行できないことに気づきました。問題は、xargsがフルファイルパスを渡さないようです。 xargsコマンドにフルファイルパスを渡すには?
答え1
この場合、ファイルに対して発生する可能性のある唯一のエラーは、xargs
実行可能ファイルが見つからないことです。rename
ファイルに関するその他のすべての内容は、xargs
実行中のプログラムから入手する必要があります。
このコマンドはシェルスクリプトで使用できますcd
。ただし、この場合、スクリプトはどのディレクトリを使用する必要があるのかわかりません。
試してみたいかもしれません
( cd "/media/171/" && ls -1rt | xargs rename 's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e' )