查找并解压缩所有文件

时间:2018-09-23 15:10:04

标签: bash find exec unrar

嗨,我正在研究一个脚本,该脚本使用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-,但是在将内容提取到运行脚本的目录中时,也能得到相同的结果。

2 个答案:

答案 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 {} \;

http://man7.org/linux/man-pages/man1/find.1.html