解析することは安全でないls
又はパイプにfind
[ 1、2 ]
解析しても安全(パイプに)の出力ではないls
か、find
それが可能に見つけることが主な理由は、ファイル名などの非通常の文字、改行、タブ ...ここでは、純粋なシェルサイクルがうまくいく[ cuonglm ]。オプションでパイプされていないコマンドで
も動作します:find
-exec
find ./*.png -exec basename {} .png \;
更新/メモ:find .
隠しファイルを検索したり、隠されfind ./*.png
ていないファイルのみを取得したりできます。ではfind *.png -exec ...
あなたは場合の問題点を持つことができ、それは名前のファイルに存在していた.png
のfindはオプションとしてそれを取得しますので。あなたは追加することができます-maxdepth 0
という名前のディレクトリに下降しないようにするにはDir_01.png
、またはfind ./*.png -prune -exec ...
MAXDEPTHは(感謝ステファン)許可されていないとき。これらのディレクトリを一覧表示したくない場合は、オプションを追加する必要があります-type f
(他の種類の非正規ファイルも除外されます)。man
使用可能なすべてのオプションについてのより完全なパノラマを見てください。移植性を高めるために、それらがPOSIX準拠であるかどうかを必ず確認してください。
もっと言葉を
たとえば、ドキュメントからタイトルをコピーしてファイル名に貼り付けると、1つ以上の改行がファイル名自体で終了することがあります。さらに、改行の直前に使用しなければならないキーさえもタイトルに含めることができるほど不運な場合もあります。
The new art of working on .png
files and other formats.
テストする場合は、コマンドを使用してこのようなファイル名を作成できます
touch "A file with two lines"$'\n'"and This is the second.png"
touch "The new art of working on .png"$'\n'"files and other formats.png"
印刷不可能な文字の代わりにシンプル/bin/ls *png
が出力されます?
A file with two lines?and This is the second.png
The new art of working on .png?files and other formats.png
出力をパイプするすべての場合、ls
またはfind
次のコマンドには、現在の行が新しいファイル名に由来するのか、それとも前のファイル名の改行文字に続くのかを理解するヒントがありません。厄介な実際の名前、まだ法的1。
シェルパラメータ膨張有するシェルサイクルは${parameter%word}
、変異体との両方にprintf
、またはecho
動作します[ cuonglm ]、[ Anthon1 ]。
for f in *.png; do printf "%s\n" "${f%.png}" ; done
Shell Parameter Expansion [ 3 ]のmanページから
$ {parameter%word}
$ {parameter %% word}
...展開の結果は、最短一致パターン(「%」ケース)または最長一致パターン(「%%」ケース)が削除されたパラメーターの値です。
.
が含まれている場合と含まれていない場合があります。慣例.png
では最後にファイルに名前を付けるようになっていますが、foo.zip
ormy.picture.20160518
またはor という名前のPNGファイルを作成できない理由はありませんmypic
。