2014-11-10 3 views
0

Я пытаюсь переместить все мои видеофайлы, которые находятся в каталоге моих картинок, в мой каталог фильмов. Кстати, это на Mac.Передача аргументов в командной строке Unix при использовании | symble

Я думал, что я мог бы просто Recurse все мои изображения каталогов с «LS -R»

Тогда я труба, что Grep -i «.avi» Это дает мне все файлы фильмов.

Теперь я передаю эти значения в «mv -n $ 1 ~/Movies», и я надеюсь, что они переместят файлы в папку «Фильмы».

У меня есть несколько проблем. 1. «ls -R» не указывает путь при перечислении файлов. Поэтому я думаю, что не могу переместить файл. 2. Кажется, я не могу присвоить имя файла $ 1 в команде mv.

Все вместе моя команда выглядит следующим образом: Обратите внимание, я бегу это от ~/Pictures

ls -R | grep -i ".avi" | mv -n $1 ~/Movies 

Так прямо сейчас я не уверен, какая часть не удается, но я получаю эту ошибку:

usage: mv [-f | -i | -n] [-v] source target 
    mv [-f | -i | -n] [-v] source ... directory 

Если я удаляю команду «mv», я получаю список файлов avi без пути. Пример ниже:

4883.AVI 
4884.AVI 
4885.AVI 
4886.AVI 
4887.AVI 
... 

Любой есть идеи о том, как я могу получить путь в «LS», или как передать значение в между «|» команды.

Спасибо.

+0

Вы получаете эту ошибку, потому что здесь $ 1 имеет значение NULL, поэтому для команды' mv', как вы передали только одно значение. Таким образом, его высказывание должно передать источник и назначение обоих. –

ответ

-1

вы можете добиться этого во многих отношениях, один из его в моем openion:

ls -R | grep -i ".avi" | while read movie 
do 
    echo " moving $movie" 
    mv $movie ~/Movies/ 
done 
+0

Спасибо. пропустите этот. Я верю, что вы все предоставили мне то, что мне нужно. Еще раз спасибо! – Rubio

+0

не забудьте принять ответ, который вам больше всего помог ... –

+0

[Не разбирайте вывод 'ls'] (http://mywiki.wooledge.org/ParsingLs). – chepner

1

Это лучше, если вы используете find команду:

$ find -name "*.avi" -exec mv {} ~/Movies \; 
-1

Используйте кавычку

mv `ls *.avi` ~/Movies 
+0

Не используйте 'ls' следующим образом. – chepner

0

Петля for может помочь вам найти все файлы avi

shopt -s nullglob 
for file in *.avi 
do 
    mv "$file" "$file" ~/Movies/"$file" 
done 
+0

Это не рекурсивный , но вы можете использовать 'shopt -s globstar, для файла в **/*. avi' в' bash 4' или более поздней версии. – chepner

+0

@chepner благодарит вас за редактирование – nu11p01n73R

0

вы должны создать простой copy.sh как этот

#!/bin/bash 
cp $1 ~/Movies/ 

команды запуска ./copy.sh «$ (LS | grep avi) "