我正在写一个bash脚本,需要帮助。这是我尝试过的:
借助@merlin2011
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: `basename $0` <absolute-path> <number>"
exit 1
fi
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
#find . -name "$2" -exec mv {} /some/path/here \;
find $1 >> /tmp/test
for line in $(cat `/tmp/test`); do
echo $line | mv $2 awk -F"/" '{for (i = 1; i < NF; i++) if ($i == "$2") print $(i-1)}'
done现在,我想从数组中检查find命令的结果,如果有一个名为2010的目录,那么就得到它的绝对路径。例如:
arr[1]="/path/to/2010/file.db"然后,我想将2010重命名为父目录to。我的模式是:
arr[1]="/path/to/2010/file.db"
arr[2]="/path/test/2010/fileee.db"
arr[3]="/path/tt/2010/fileeeee.db"
.
.
.
arr[100]="/path/last/2010/fileeeeeee.db"结果应该是:
mv /path/to/2010/ to
mv /path/test/2010 test
mv /path/tt/2010/ tt
.
.
.
mv /path/last/2010 last更新:
总而言之,我想知道如何在awk中反向获取变量。
/path/to/dir1/2010/file.db我想在absolute path中搜索,然后使用/ pattern like : awk -F"/" {print [what?]}在之前的路径中查找2010并将其重命名
告诉awk我的状态是2010,然后在它之前打印一个变量,因为知道拆分器是/
更新
文件目录和子目录模式为:
/path/to/file/efsef/2010/1.db
/path/to/file/hfjh/sdfsf/2010/2.db
/path/to/file/dsf/sdhher/aqwe/sfrt/2010/3.db
.
.
.
/path/to/file/kldf/2010/100.db我想将所有2010年的目录重命名为其父目录,然后将所有目录重命名为tar .db
这正是我想要的:)
发布于 2014-04-13 13:27:37
此答案仅针对OP的更新。我的最佳解释是,您试图让awk在字符串/path/to/dir1/2010/file.db内打印值dir1。下面这行代码将实现这一点。
awk -F"/" '{for (i = 1; i < NF; i++) if ($i == "2010") print $(i-1)}'我使用以下命令进行了测试,该命令将输出dir1。
echo /path/to/dir1/2010/file.db | awk -F"/" '{for (i = 1; i < NF; i++) if ($i == "2010") print $(i-1)}'根据您的更新,您应该用backtic操作符将awk命令括起来。
mv $2 `awk -F"/" '{for (i = 1; i < NF; i++) if ($i == "$2") print $(i-1)}'`发布于 2014-04-13 13:05:55
To implement, we have to do the recursive folder search.
It should be combination of two commands like find and mv
find . -name "2010" -exec mv {} /some/path/here \;
Other way shared by merlin2011
mv $2 awk -F"/" `'{for (i = 1; i < NF; i++) if ($i == "$2") print $(i-1)}'`发布于 2014-04-13 13:50:18
下面是awk命令:
awk -F"/$2/" '{split($1, a, "/"); system("echo mv " $0 " " a[length(a)]);}' <<< "$1"
mv /path/to/dir1/2010/file.db dir1一旦您感到满意,请在系统命令中删除echo。
https://stackoverflow.com/questions/23039264
复制相似问题