linux - 如何通过单个扩展名复制所有文件
问题描述
我有文件列表 a.xxx a.yyy。a.zz
例如,我需要通过按扩展名选择复制所有文件
ls *.xxx | xargs cp a.* dir
我写这样的代码
ls mysql/db/*.MYD | xargs -n1 basename | sed 's/\.MYD//g' | xargs -i cp mysql/db/{}.* new_folder
但得到错误
cp: cannot stat 'mysql/db/ps_opc_social_customer.*'
解决方案
这里的问题是,*
最后一个命令中的最后一个命令会在您按下回车的那一刻被 shell 扩展,因此复制命令不会得到扩展的字符串,而是文字<file>.*
字符串。您需要一次性获取所有需要的文件,或者使用新的 shell 为您进行 glob 扩展:
ls mysql/db/*.MYD | xargs -n1 basename | sed 's/\.MYD//g' | xargs -i bash -c "cp mysql/db/{}.* new_folder"
推荐阅读
- excel - 如何从字符串值(以分隔符分隔的单元格中的日期)制作列表
- php - 选择选项值作为“0”插入数据库而不是实际值
- android - android材质按钮图标垂直居中
- c++ - Vectors passed in as construction arguments
- php - 具有肥皂 XML 身份声明属性的 PHP 对象
- ios - iOS 和 Safari macOS 中的 z-index 反转
- excel - How to Look a tab HIddenmidpoint Column A and if it matches Column M on Step 2 tab then output what is on Column B on the hiddenmidpoint Tab
- json - 使用结构解码未命名的 JSON 数组 swift 4
- python - 如何修复 Python 中的“索引超出范围”错误?
- c++ - Why does std::array not have an operator T*?