検索コンテンツを別のディレクトリに移動

検索コンテンツを別のディレクトリに移動

私はOracle Solarisを使用しています。

私は以下を使用しています:

grep "searchstring" filename.*

上記のコマンドは私の検索結果を返します。

さて、上記の検索結果のすべてのファイル(検索結果のすべてのファイルではない)を特定のディレクトリに移動したいと思います../mydir/

これを1つのコマンドでどのように実行できますか(検索と移動の両方を1行のコマンドで実行する必要があります)。

ベストアンサー1

kshbashまたは の/usr/xpg4/bin/shファイル名に改行文字が含まれていないと仮定すると、grep -lの出力に Split+glob 演算子を使用できます。-l一致するファイルです)。

この演算子は離れて呼び出されます。コマンドの置き換え`...`または$(...))引用符なし。ここでは、特殊変数を使用して$IFS分割する文字(ここでは改行)を指定し、そのglob部分を次のように無効にするように調整しますset -f

IFS='
'
set -f
mv $(set +f; grep -l searchstring filename*) ../mydir/

(ワイルドカードを復元します。~へ拡張のためのfilename*コマンドの置き換え(サブシェルで実行)

これは次のように単純化できます。

mv $(grep -l searchstring filename*) ../mydir/

ファイル名にスペース、タブ、改行、*または?文字が含まれていないことがわかっている場合[。上記の分割は、改行、スペース、タブ(デフォルト$IFS)で行われ、分割結果の各単語にワイルドカードを実行します(ただし、ファイル名にワイルドカードが含まれていない限り問題ありません)。

ファイル名に改行文字が含まれていないことを保証できない場合は、ループを使用できます。

for f in filename*; do
  grep -q searchstring "$f" && mv "$f" ../mydir/
done

おすすめ記事