Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将子目录文件分别向上移动一级的linux命令是什么_Linux_Find_Mv - Fatal编程技术网

将子目录文件分别向上移动一级的linux命令是什么

将子目录文件分别向上移动一级的linux命令是什么,linux,find,mv,Linux,Find,Mv,我的服务器上文件的路径结构类似于下图所示 /home/sun/sdir1/mp4/file.mp4 /home/sun/collection/sdir2/mp4/file.mp4 我想将“mp4”的文件升级到一个级别(分别升级到sdir1和sdir2) 所以输出应该是, /home/sun/sdir1/file.mp4 /home/sun/collection/sdir2/file.mp4 我不知道该怎么做,所以还没试过 您可以这样做: # move all .mp4 files from sd

我的服务器上文件的路径结构类似于下图所示

/home/sun/sdir1/mp4/file.mp4 /home/sun/collection/sdir2/mp4/file.mp4

我想将“mp4”的文件升级到一个级别(分别升级到sdir1和sdir2)

所以输出应该是,

/home/sun/sdir1/file.mp4 /home/sun/collection/sdir2/file.mp4

我不知道该怎么做,所以还没试过

您可以这样做:

# move all .mp4 files from sdir1/mp4 to sdir1 directory
user@host:~/home/sun$ mv sdir1/mp4/*.mp4 sdir/

# move all .mp4 files from collection/sdir2/mp4 to collection/sdir2 directory
user@host:~/home/sun$ mv collection/sdir2/mp4/*.mp4 collection/sdir2/

# move only 1 file
user@host:~/home/sun$ mv sdir1/mp4/file.mp4 sdir/
user@host:~/home/sun$ mv collection/sdir2/mp4/file.mp4 collection/sdir2/

我建议您使用
find
之类的工具

cd /home/sun/sdir1/mp4/
find . -name "*" -exec mv {} /home/sun/sdir1/ \;
cd /home/sun/collection/sdir2/mp4/
find . -name "*" -exec mv {} /home/sun/collection/sdir2/ \;
cd /home/sun/sdir1/mp4/
tar cfp - * | (cd ../ ; tar xvvf -)
# Make sure everything looks good
rm -rf mp4
cd /home/sun/collection/sdir2/mp4/
tar cfp - * | (cd ../ ; tar xvvf -)
# Make sure everything looks good
rm -rf mp4
或者,您可以使用
tar
和类似的

cd /home/sun/sdir1/mp4/
find . -name "*" -exec mv {} /home/sun/sdir1/ \;
cd /home/sun/collection/sdir2/mp4/
find . -name "*" -exec mv {} /home/sun/collection/sdir2/ \;
cd /home/sun/sdir1/mp4/
tar cfp - * | (cd ../ ; tar xvvf -)
# Make sure everything looks good
rm -rf mp4
cd /home/sun/collection/sdir2/mp4/
tar cfp - * | (cd ../ ; tar xvvf -)
# Make sure everything looks good
rm -rf mp4

有不同的方法来解决你的问题

  • 如果只想移动这些特定文件,请运行以下命令:

    cd/home/sun/
    mv sdir1/mp4/file.mp4 sdir1/
    mv sdir2/mp4/file.mp4 sdir2/
    
  • 如果要移动这些目录(sdir1和sdir2)上的所有mp4文件,请运行以下命令:

    cd/home/sun/
    mv sdir1/mp4/*.mp4 sdir1/
    mv sdir2/mp4/*.mp4 sdir2/
    
  • 编辑:

  • 制作一个脚本,迭代所有目录:
  • 创建一个脚本,命名并使用您最喜欢的编辑器(nano、vim、gedit等)进行编辑:

    脚本文件内容为:

    #/bin/bash
    #转到所需目录
    cd/主页/太阳报/
    #对文件夹中的所有子目录执行操作
    适用于dir in/home/sun/*/
    做
    dir=${dir%*/}
    mv“$dir”/mp4/*.mp4“$dir”/
    #如果要在移动文件后删除子目录,请取消对以下行的注释
    #rm-rf“$dir”
    完成
    
    保存文件并授予其执行权限:

    chmod +x folderIterator.sh
    
    并执行它:

    ./folderIterator.sh
    

    将文件(或目录)上移一级的命令是:

    mv /home/sun/sdir1/mp4/file.mp4 ..
    
    通配符可用于选择更多文件和目录,您还可以一次提供多个目录

    mv /home/sun/sdir1/mp4/*.mp4 /home/sun/collection/sdir2/mp4/*.mp4 ..
    

    mv
    是移动文件的命令。您是想使用shell脚本批量执行此操作,还是只想每次执行此命令?但我想将多个目录的文件移动到各自的目标中,正如我在问题中所讨论的。@iShaymus,是的,我想批量执行此操作…什么与文件路径一致?他们都在同一个驱动器上吗?他们都有/mp4/文件夹吗?我不仅有这两个目录,它超过5k…但我不想执行命令5k时间…我添加了一个脚本,在/home/sun上的子目录上进行迭代/