使用|时,在Unix命令行中传递参数符号

时间:2014-11-10 05:50:59

标签: shell unix parameters command ls

我正在尝试将我的图片目录中的所有视频文件移动到我的电影目录中。顺便说一句,这是在Mac上。

我以为我可以通过“ls -R”

简单地通过我所有的图片目录进行递归

然后我把它传递给grep -i“.avi”这给了我所有的电影文件。

现在我将这些值传递给“mv -n $ 1~ / Movies”,我希望将这些文件移到Movies文件夹中。

我有几个问题。  1.列出文件时,“ls -R”不会列出路径。所以我想我可能无法移动文件。  2.我似乎无法将文件名分配给mv命令中的$ 1。

我的命令总是如此:注意我从〜/ 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'中的路径或如何在'|'之间传递值有任何想法命令。

感谢。

5 个答案:

答案 0 :(得分:1)

最好使用find命令:

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

答案 1 :(得分:0)

bash for循环可以帮助您轻松找到所有avi个文件

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

答案 2 :(得分:0)

你应该像这样创建简单的copy.sh

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

运行命令./copy.sh" $(ls | grep avi)"

答案 3 :(得分:-1)

你可以通过多种方式实现这一目标,我认为其中之一:

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

答案 4 :(得分:-1)

使用反引号

mv `ls *.avi` ~/Movies