Shell 使用| symble时在Unix命令行中传递参数
我正在尝试将图片目录中的所有视频文件移动到电影目录。顺便说一下,这是在Mac电脑上 我想我可以用ls-R简单地递归我所有的图片目录 然后我把它传给grep-I.avi这给我所有的电影文件 现在我将这些值通过管道传输到mv-n$1~/Movies,我希望它能将文件移动到Movies文件夹中 我有几个问题。 1.在列出文件时,ls-R不会列出路径。所以我想我可能无法移动文件。 2.我似乎无法在mv命令中获得分配给$1的文件名 总之,我的命令是这样的:注意,我是从~/Pictures运行这个命令的Shell 使用| symble时在Unix命令行中传递参数,shell,unix,parameters,command,ls,Shell,Unix,Parameters,Command,Ls,我正在尝试将图片目录中的所有视频文件移动到电影目录。顺便说一下,这是在Mac电脑上 我想我可以用ls-R简单地递归我所有的图片目录 然后我把它传给grep-I.avi这给我所有的电影文件 现在我将这些值通过管道传输到mv-n$1~/Movies,我希望它能将文件移动到Movies文件夹中 我有几个问题。 1.在列出文件时,ls-R不会列出路径。所以我想我可能无法移动文件。 2.我似乎无法在mv命令中获得分配给$1的文件名 总之,我的命令是这样的:注意,我是从~/Pictures运行这个命令的 l
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”中获取路径,或者如何在“|”命令之间传递值
谢谢。您可以通过多种方式实现这一点,我的openion中有一种:
ls -R | grep -i ".avi" | while read movie
do
echo " moving $movie"
mv $movie ~/Movies/
done
最好使用find命令: 使用反勾号
mv `ls *.avi` ~/Movies
bash for循环可以帮助您轻松找到所有avi文件
shopt -s nullglob
for file in *.avi
do
mv "$file" "$file" ~/Movies/"$file"
done
您应该像这样创建simple copy.sh
#!/bin/bash
cp $1 ~/Movies/
一个run命令。/copy.sh$ls | grep avi您得到了这个错误,因为这里$1的值为NULL,所以命令mv-its就像您只传递了一个值一样。因此,它说您需要同时传递源和目标。谢谢您,我将完成这一步。我相信你们都给了我所需要的。再次感谢!!别忘了接受对你帮助最大的答案。快乐学习。@chepner:请你解释一下原因。不要这样使用ls。这不是递归的,但你可以使用shopt-s globstar;用于bash 4或更高版本中**/*.avi中的文件。
#!/bin/bash
cp $1 ~/Movies/