你可以把一切都放在一个文件,排序,然后使用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-20 09:40:40
这是我做了什么至今 Seraching与#^ grep的-ircl --exclude = * {PNG,JPG,GIF,HTML,罐子} “^#”/家 查找可执行 查找文件。 -type f -perm +111或find。 -type f -perm -u + x 现在我正在努力如何将这两个命令分配到最终的输出,我可以通过它来执行备份并从当前目录中删除 – 2012-07-20 09:53:27
请在您的问题中进行编辑。在评论中阅读代码很困难。 – 2012-07-20 10:01:24