我有一个文件,每行都是一些数字的字符串,如
1234
2345
...
我需要将名称中包含该数字的文件移动到目录示例
的其他内容1234_hello_other_stuff_2334.pdf
2345_more_stuff_3343.pdf
我尝试使用xargs来执行此操作,但我的bash脚本编写并不是最好的。任何人都可以分享正确的命令来完成我想做的事吗?
答案 0 :(得分:4)
for i in `cat numbers.txt`; do
mv ${i}_* examples
done
或(看马,没有cat
!)
while read i; do
mv ${i}_* examples
done < numbers.txt
答案 1 :(得分:2)
你可以使用for循环,但这可能会产生一个非常长的命令行。如果number.txt中有20000行,则可能会遇到shell限制。相反,你可以使用管道:
cat numbers.txt | while read number; do
mv ${number}_*.pdf /path/to/examples/
done
或:
sed 's/.*/mv -v &_*.pdf/' numbers.txt | sh
您可以不使用| sh
进行测试。如果文件中还有其他行,并且您只想匹配4位数的行,则可以限制匹配:
sed -r '/^[0-9]{4}$/s//mv -v &_*.pdf/' numbers.txt | sh
答案 2 :(得分:2)
cat numbers.txt | xargs -n1 -I % find . -name '%*.pdf' -exec mv {} /path/to \;
%
是您的号码(-n1
表示一次一个),'%*.pdf'
到find
表示它将匹配名称以该号码开头的所有文件;然后它只复制到/path/to
({}
是实际的文件名。)