如何删除以#开头的文件!或以名称中的.sh结尾

时间:2012-07-20 09:38:43

标签: shell unix

我是shell编程新手。我想将任何可执行文件,任何以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 个答案:

答案 0 :(得分:0)

使用xargs命令

“找到命令”| xargs“grep command”

答案 1 :(得分: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 }'