2016-01-22 2 views
2

У меня есть эта структура каталогов:Могу ли я использовать xargs как часть пути к каталогу?

% ls /tmp/source_dir/ 
aa-aa/ bb-bb/ cc-cc/ morejunk/ somejunk/ 

% ls /tmp/dest_dir 
aa-aa/ bb-bb/ blah/ blahblah/ 

Для каждого каталога в согласовании dest_dir ?? - ??, я хочу, чтобы скопировать соответствующий файл «goodfile» из source_dir. Я пробовал следующее безрезультатно:

% cd /tmp/dest_dir 

/tmp/dest_dir% \ls -d ??-?? | xargs cp /tmp/source_dir/{}/goodfile {} 
cp: cannot stat `/tmp/source_dir/{}/goodfile': No such file or directory 
cp: cannot stat `{}': No such file or directory 
cp: omitting directory `aa-aa' 

/tmp/dest_dir% \ls -d ??-?? | xargs bash -c "cp /tmp/source_dir/{$0}/goodfile {$0}" 
cp: cannot stat `/tmp/source_dir/{/bin/bash}/goodfile': No such file or directory 

Несомненно, есть ли способ сделать это без написания отдельного сценария?

ответ

2

Это xargs должно работать:

cd /tmp/dest_dir 

\ls -d ??-?? | xargs -I{} cp /tmp/source_dir/{}/goodfile {} 
1

Другое решение, но без xargs

find . -iname "??-??" -exec cp goodfile "{}" \; 
+0

является то, что должно быть выполнено из/TMP/dest_dir? Если это так, вам нужно указать source_dir в пути где-то, правильно? – kslnet

+0

Да. Вы можете сначала cd to/tmp/dest_dir или просто поместить путь enteri по команде, например find/folder/to/find -iname "?? - ??" -exec cp/folder/goodfile "{}" \; –

+1

А, ладно, просто пришлось немного подстроить его: найти. -имя "??-??" -exec cp/tmp/source_dir/{}/goodfile {} \; – kslnet

Смежные вопросы