Найти и удалить все файлы - PullRequest
0 голосов
/ 23 сентября 2018

Привет! Я работаю над сценарием, который синхронизирует контент с удаленного сайта с использованием 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-, но это дает мне тот же результат, когдасодержимое извлекается в каталог, из которого был запущен скрипт.

1 Ответ

0 голосов
/ 23 сентября 2018

Может быть:

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
...