我是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
现在我正在努力如何使用这两个命令来获得最终输出,我可以通过它来执行备份并从当前目录中删除
由于
答案 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 }'