382

誰かが次のことを行うためのコードを提供してくれませんか: ファイルのディレクトリがあり、そのすべてをプログラムで実行する必要があるとします。プログラムは結果を標準出力に出力します。ディレクトリに入り、各ファイルでコマンドを実行し、出力を 1 つの大きな出力ファイルに連結するスクリプトが必要です。

たとえば、1 つのファイルに対してコマンドを実行するには、次のようにします。

$ cmd [option] [filename] > results.out
4

10 に答える 10

543

次のbashコードは、$fileをコマンドに渡します。$fileは/dir内のすべてのファイルを表します。

for file in /dir/*
do
  cmd [option] "$file" >> results.out
done

el@defiant ~/foo $ touch foo.txt bar.txt baz.txt
el@defiant ~/foo $ for i in *.txt; do echo "hello $i"; done
hello bar.txt
hello baz.txt
hello foo.txt
于 2012-05-09T20:18:24.807 に答える
223

これはどう:

find /some/directory -maxdepth 1 -type f -exec cmd option {} \; > results.out
  • -maxdepth 1引数は、findがサブディレクトリに再帰的に下降するのを防ぎます。(このようなネストされたディレクトリを処理する場合は、これを省略できます。)
  • -type -fプレーンファイルのみが処理されることを指定します。
  • -exec cmd option {}見つかったファイルごとcmdに指定されたファイル名で実行するように指示します。option{}
  • \;コマンドの終了を示します。
  • 最後に、すべての個々のcmd実行からの出力はにリダイレクトされ ますresults.out

ただし、ファイルが処理される順序を気にする場合は、ループを作成する方がよい場合があります。私findはファイルをiノードの順序で処理すると思います(私はそれについて間違っているかもしれませんが)、それはあなたが望むものではないかもしれません。

于 2012-05-09T20:17:40.690 に答える
94

コマンドラインからRaspberry Riでこれを実行するには、次を実行します。

for i in *; do cmd "$i"; done
于 2016-05-19T21:03:33.880 に答える
1

@Jim Lewisのアプローチに基づく:

findこれは、ファイルを変更日で使用およびソートする簡単なソリューションです。

$ find  directory/ -maxdepth 1 -type f -print0 | \
  xargs -r0 stat -c "%y %n" | \
  sort | cut -d' ' -f4- | \
  xargs -d "\n" -I{} cmd -op1 {} 

並べ替えについては、次を参照してください。

http://www.commandlinefu.com/commands/view/5720/find-files-and-list-them-sorted-by-modification-time

于 2013-12-25T08:13:17.837 に答える
1

すべての .md ファイルを 1 つのディレクトリから別のディレクトリにコピーする必要があったため、次のようにしました。

for i in **/*.md;do mkdir -p ../docs/"$i" && rm -r ../docs/"$i" && cp "$i" "../docs/$i" && echo "$i -> ../docs/$i"; done

これはかなり読みにくいので、分解してみましょう。

最初に、ファイルのあるディレクトリに cd し、

for i in **/*.md;パターン内の各ファイルに対して

mkdir -p ../docs/"$i"ファイルを含むフォルダーの外の docs フォルダーにそのディレクトリを作成します。そのファイルと同じ名前の追加のフォルダーを作成します。

rm -r ../docs/"$i"結果として作成された余分なフォルダーを削除しますmkdir -p

cp "$i" "../docs/$i"実際のファイルをコピーする

echo "$i -> ../docs/$i"あなたがしたことを反響させる

; done末永く幸せに過ごす

于 2017-11-01T21:57:44.470 に答える
0

簡単な解決策は次のとおりだと思います。

sh /dir/* > ./result.txt
于 2019-04-16T07:37:34.843 に答える