検索とls出力

検索とls出力

すべての.mp4ムービーをテキストファイルに出力するのに問題があります。うまくいきますが、何か奇妙なことが起こっており、その理由がわかりません。

これはコマンドです。

find "/volume1 HD FILMS" -iname "*.mp4" -type f -exec ls {} \; > "/volume1/3. HD FILMS/HD_FILMS_`date +%d.%m.%Y`.txt"
  1. なぜパスを出力するのですか?ディレクトリのlsがファイルを印刷するとき(それが私が望むものです)
  2. 出力ファイルがアルファベット順ではないのはなぜですか? (ディレクトリのlsと再比較するとランダムに見えます。)

これらの問題をどのように解決できますか?

答え1

正確な質問に答えるには:

なぜパスを出力するのですか?ディレクトリのlsがファイルを印刷するとき(それが私が望むものです)

あなたが原因でパスを出力しますいいえディレクトリ内で。 ls somedirとは異なりますcd somedir; ls

出力ファイルがアルファベット順ではないのはなぜですか? (ディレクトリのlsと再比較するとランダムに見えます。)

lsファイルをアルファベット順にソートして出力します。みんな。したがって、印刷する前に並べ替える機会があります。

findwithを使用して-execwithコマンドを終了すると、明示的にコマンド(この場合はコマンド)を実行することを\;意味します。findlsすべて見つかったファイルとしてfind。したがって、ソートすることは不可能です。

これを使用すると、ls -l各印刷行が実際に異なるコマンドから出力されるため、列が正しく揃っていないことがわかります。

代わりに、必要に応じてfind ... -lsorまたはを使用することを検討してください。find ... -print-exec lsあなたはそれを使用することができます-exec ls {} +、ほとんどのソートを処理する必要があります。 (具体的にはすべてのファイルを並べ替えることができますが、その数が大きすぎてシステム容量を超える場合は別々のコマンドを使用する必要があり、個々の配置ARG_MAXは個別に並べ替えられます。)findls


メモ:個人的には、このようなファイル名のリストをテキストファイルに保存しません。できる改行文字を含みます。テキストファイルを個々のファイル名に解析する明確な方法はありません。期間。 (望むよりなぜいいえ分析ls)

代わりにfindコマンドを実行してください。何かしたいときファイルと一緒に事前に実行し、前の出力で操作を実行しないでください。

人間が読めるすべてのファイルのリストを生成するには、mp4パスコンポーネントを削除してこれらのファイル名に依存できないことを強調したいと思います。

find "/volume1 HD FILMS" -iname "*.mp4" -type f -print | sed 's:.*/::;s/\.[mM][pP]4$//' > "/volume1/3. HD FILMS/HD_FILMS_$(date +%d.%m.%Y).txt"

関連情報