我有以下文件和目录:
我希望将所有的
我尝试过的方法是:
但是应该是这样的:
/tmp/jj/
/tmp/jj/ese
/tmp/jj/ese/2010
/tmp/jj/ese/2010/test.db
/tmp/jj/dfhdh
/tmp/jj/dfhdh/2010
/tmp/jj/dfhdh/2010/rfdf.db
/tmp/jj/ddfxcg
/tmp/jj/ddfxcg/2010
/tmp/jj/ddfxcg/2010/df.db
/tmp/jj/ddfnghmnhm
/tmp/jj/ddfnghmnhm/2010
/tmp/jj/ddfnghmnhm/2010/sdfs.db
我希望将所有的
2010
目录重命名为其父目录,然后tar
所有.db
文件...我尝试过的方法是:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: `basename $0` <absolute-path>"
exit 1
fi
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
rm /tmp/test
find $1 >> /tmp/test
for line in $(cat /tmp/test)
do
arr=$( (echo $line | awk -F"/" '{for (i = 1; i < NF; i++) if ($i == "2010") print $(i-1)}') )
for index in "${arr[@]}"
do
echo $index #HOW TO WRITE MV COMMAND RATHER THAN ECHO COMMAND?
done
done
1) 结果是:
ese
dfhdh
ddfxcg
ddfnghmnhm
但是应该是这样的:
ese
dfhdh
ddfxcg
ddfnghmnhm
2) 如何将所有2010目录重命名为其父目录?我的意思是如何执行此操作(我想在循环中执行,因为有大量目录):
mv /tmp/jj/ese/2010 /tmp/jj/ese/ese
mv /tmp/jj/dfhdh/2010 /tmp/jj/dfhdh/dfhdh
mv /tmp/jj/ddfxcg/2010 /tmp/jj/ddfxcg/ddfxcg
mv /tmp/jj/ddfnghmnhm/2010 /tmp/jj/ddfnghmnhm/ddfnghmnhm
find
命令中传递给脚本的第一个参数。 - devnullfind
的{}
占位符不应该以那种方式使用。想象一下,如果有一个带引号和恶意命令的文件,你就完了!你sh
命令中所有的{}
都应该替换为$1
。 - gniourf_gniourf