【发布时间】:2014-05-27 04:24:14
【问题描述】:
我正在编写一个 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 中搜索,然后找到 2010 并在以前的路径中将其重命名为 / pattern like : awk -F"/" {print [what?]}
告诉 awk 我的状态是 2010 年,然后通过知道 splitter 是 / 在它之前打印一个变量
更新
文件目录和子目录模式是:
/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 all .db
这正是我想要的:)
【问题讨论】:
-
我刚刚更新了。让我知道这是否符合您的要求。
-
所以您想将
/path/to/dir1/2010/file.db传递给awk 并搜索2010?如果找到2010,接下来你想做什么? -
谢谢...如果找到2010 [第二个参数]我想将其重命名为父目录...
-
所以你想要:
mv /path/to/dir1/2010/file.db dir1? -
我想做:mv $2 [$2的父目录]