嗨,我正在研究一个脚本,该脚本使用SFTP同步来自远程站点的内容,然后提取所有存档。但是,我正在努力将提取的文件保存到正确的(源)目录中。
我从for循环开始,但一直认为这样做可能更有效。
list=`find $local_dir -type f -name *.rar`
for line in $list; do
DEST=${line%/*}
unrar x -o- $line $DEST
done
要求:
1. Find all RAR files
2. Extract all rar files to the directory each rar is located
/sync/testfile.rar --> /sync/testfile.file
/sync/testdir/testfile1.rar --> sync/testdir/testfile1.file
/sync/testdir/testfile2.rar --> sync/testdir/testfile2.file
这是我当前的命令。在我使用的循环中,我专门调出了目的地,但不确定如何在一行中做到这一点。
find $local_dir -type f -name '*.rar' -exec unrar x -o- {} \;
我也尝试过unrar xe -o-
,但是在将内容提取到运行脚本的目录中时,也能得到相同的结果。
答案 0 :(得分:0)
也许:
find $local_dir -type f -name '*.rar' -exec sh -c 'echo unrar x -o- {} $(dirname {})' \;
我在unrar
前面加上了echo
,以便可以检查
命令将要做。例如,对于像这样的目录结构
这个:
$ tree
.
├── a.rar
├── b
│ └── z.rar
└── b.rar
1 directory, 3 files
它将打印:
$ find $local_dir -type f -name '*.rar' -exec sh -c 'echo unrar x -o- "{}" "$(dirname {})"' \;
unrar x -o- ./b.rar .
unrar x -o- ./a.rar .
unrar x -o- ./b/z.rar ./b
答案 1 :(得分:0)
基本上在您的示例中,“-exec”应为“ -execdir” (未经测试的Unrar开关)
从同步上方的文件夹执行: folderAboveSync $ find -name'* .rar'-execdir unrar e {} \;