3

私はシェルプログラミングが初めてです。実行可能ファイル、shebang(#!) で始まるファイル、名前が で終わるファイルを.shディレクトリから /tmp/backup に移動し、移動したファイルの名前をログに記録したいと考えています。

これは私が今までやってきたことです

でファイルを検索する#^

grep -ircl --exclude=*.{png,jpg,gif,html,jar} "^#" /home

実行可能ファイルの検索

find . -type f -perm +111 or find . -type f -perm -u+x

今、私はこれらの2つのコマンドをどのようにしてバックアップを実行し、現在のディレクトリから削除するために渡すことができる最終出力を得るのに苦労しています

ありがとう

4

2 に答える 2

0

xargs コマンドを使用する

"検索コマンド" | xargs "grep コマンド"

于 2012-07-21T09:22:25.440 に答える
0

すべてをファイルに入れ、並べ替えてから、Awk で処理できます。

# Select all files to move
grep -ircl --exclude=*.{png,jpg,gif,html,jar} '^#\!' /home > list.txt
find /home -type f \( -perm -u+x -o -name "*.sh" \) -print >> list.txt

# Feed them to Awk that will log and move the file
sort list.txt | uniq | awk -v LOGFILE="mylog.txt" '

{ print "Moving " $0 >> LOGFILE
  "mv -v --backup \"" $0 "\" /tmp/backup" | getline
  print >> LOGFILE }'

編集:いくつかの変数といくつかの追加のチェックを追加することにより、このスケルトンから正式なスクリプトを作成できます。

#!/bin/bash

LIST="$( mktemp || exit 1 )"
LOG="/tmp/mylog.txt"
SOURCE="/home"
TARGET="/tmp/backup"

mkdir -p "${TARGET}"

cd "${SOURCE}" || exit 1

# Select all files to move
grep -ircl --exclude=*.{png,jpg,gif,html,jar} '^#\!' "${SOURCE}" > "${LIST}"
find "${SOURCE}" -type f \( -perm -u+x -o -name "*.sh" \) -print >> "${LIST}"

# Feed them to Awk that will log and move the file
sort "${LIST}" | uniq | awk -v LOGFILE="${LOG}" -v TARGET="${TARGET}" '

{ print "Moving " $0 >> LOGFILE
  "mv -v --backup \"" $0 "\" " TARGET | getline
  print >> LOGFILE }'
于 2012-07-21T12:23:38.583 に答える