我正在尝试编写一个shell脚本来移动所有文件,除了以.sh 和结尾的文件.py.我也不想移动目录.
这是我到目前为止所得到的:
cd FILES/user/folder
shopt -s extglob
mv !(*.sh|*.py) MoveFolder/ 2>/dev/null
shopt -u extglob
Run Code Online (Sandbox Code Playgroud)
这将移动除包含.sh或的所有文件以外的所有文件.py,但所有目录也会移入MoveFolder.
我想我可以重命名文件夹,但是其他脚本已经为他们的工作分配了这些文件夹,因此重命名可能会给我带来更多麻烦.我也可以添加文件夹名称,但每当有人创建文件夹时,我都必须将其名称添加到脚本中,否则它也会被移动.
如何改进此脚本以跳过所有文件夹?
使用find此:
find -maxdepth 1 \! -type d \! -name "*.py" \! -name "*.sh" -exec mv -t MoveFolder {} +
Run Code Online (Sandbox Code Playgroud)
它能做什么:
find:找东西......-maxdepth 1:那是在当前目录中......\! -type d:那不是目录......\! -name "*.py:并且其名称不以.py... 结尾\! -name "*.sh:并且其名称不以.sh... 结尾-exec mv -t MoveFolder {} +:并将它们移动到目录 MoveFolder该-exec标志是特殊的:违背其为条件,事先标志,这个人是一个动作.对于每个匹配,+结束以下命令将指示find在命令结尾处聚集文件名,在标记为的位置{}.找到所有文件后,find执行生成的命令(即mv -t MoveFolder file1 file2 ... fileN).
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |