パスをパラメータとして受け入れ、パス内のすべての.mkvファイルを処理するスクリプトを作成しています。パスは絶対パス、相対パス、または単一ファイルにすることができます。ただし、繰り返しファイルの絶対パスがまだ必要です。
これまで私がしたことは次のとおりです。
#!/bin/bash
path=$1
if ! [ -e "$path" ]; then
path=$(pwd)
fi
find "$path" -type f -name '*.mkv' | sort | xargs realpath | while read file; do
echo "Processing $file"
done
これは、パスおよび/またはファイルにスペースがない場合に機能しますが、スペースによって失敗します。
正しいアプローチは何ですか?
ベストアンサー1
そしてzsh
:
#! /bin/zsh -
for file (${${1-.}:P}/**/*.mkv(ND.))
print -r processing $file
${1-.}
Bourneシェルのように、.
if$1
is not setに拡張されます(if$#
== 0; ifが悪いインタフェースであり、$1
isが存在しないファイルではありません。これはユーザーにとって大きな驚きです)。${param:P}
realpath()
その拡張に拡張されます。**/
シンボリックリンクに従わずに.
修飾子は選択のみを行うため、すべてのファイルに対して同じことを行う必要はありません。定期的なファイルなのでシンボリックリンクではありません。**/
すべてのレベルのサブディレクトリと一致N
nullglob、D
dotglob.
のGlob修飾子定期的なただ。