フォルダー内の各ファイルのbashコマンド


31

同じコマンドを適用したいファイルのセットがあり、出力には処理されたファイルと同じ名前が含まれている必要がありますが、拡張子は異なります。

現在、/ my / data / Andrew.docの名前を/my/data/Andrew.txtに変更しています。/my/data/フォルダーのすべての.docファイルに対してこれを行い、名前を保持します。

いくつかのバージョンを試しましたが、Linuxを初めて使用するため、構文に何か問題があると思います。


→もう少し完全で実用的な例:stackoverflow.com/a/43474757/444255
フランクノッケ

回答:


76

これにアプローチする方法は少なくとも10億の方法がありますが、ここに上位の候補があります。

Bash forループ

for f in ./*.doc; do
    # do some stuff here with "$f"
    # remember to quote it or spaces may misbehave
done

を使用して find

findコマンドは、美しい小さな持っているexec(一部の警告で)物事を実行するための素晴らしいことだコマンドを。Findは基本的なグロビングよりも優れています。選択しているファイルを実際にフィルタリングできるからです。奇妙な構文に注意してください。

find . -iname '*.doc' -exec echo "File is {}" \;

find使用する場合がありますので、再帰的である-maxdepth 1維持するためにfind、現在の作業ディレクトリに。-type f通常のファイルを除外するために使用できます。

docをtxtに名前変更するだけの場合...

このrenameコマンドは、検索ではsedに似ています。明らかに、これはフォーマットを変換するために何もしません。

rename 's/doc$/txt/' *.doc

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.