命令行文件排序、复制

命令行文件排序、复制

从我的终端复制...

dan@Silver:/media/dan/RAID/MUSIC$ grep -r '.mp3' ./ > cp *.mp3 /home/dan/Music/
grep: input file ‘./cp’ is also the output

我在 NTFS 卷上有一个音乐收藏,我想整理一下,然后将其传输到新的 Ubuntu 设置中。上面的命令旨在搜索 6 或 7 个目录(“cp -r”不会),并且仅复制以 .mp3 结尾的文件。

我不知道 grep 在说什么。有可以为新手提供帮助吗?

答案1

适合此作业的命令行工具是find例如

find -iname '*.mp3' -type f -execdir cp -t /home/dan/Music/ -- {} +

测试-iname将不区分大小写地匹配,即.MP3以及.mp3- 我不确定这在 NTFS 文件系统上是否重要。您可以改用-name

答案2

我不确定你所说的排序是什么意思,除非你想改变目录布局,但这就是它不起作用的原因......

部分问题在于,通过使用 '>',您将 grep 命令的输出重定向到名为 'cp' 的文件,而不是使用管道 '|' 到 'cp' 命令。

然而更大的问题是你的 grep 命令可能永远不会返回(或者可能什么都不返回),因为你正在使用grep -r '.mp3' ./ 而不是grep '.mp3' -r ./ 另外,我想 grep 可能正在寻找 .mp3内容文件而不是文件名

尝试:

cd /media/dan/RAID/MUSIC
find . -name '*.mp3'

如果其中列出了您想要复制的所有文件,请尝试:

find . -name '*.mp3' -exec cp --parents "{}" /home/dan/Music \;

--exec为每个 find 匹配的文件运行一个命令,保留--parents文件的完整路径(否则所有文件都会复制到 /home/dan/Music 而不是 /home/dan/Music/subdir1 等),{}指的是当前匹配的文件。我把它放在引号里,因为音频文件里通常有空格。这\;是终止命令的方式--exec

希望这能帮到你。即使没有用,我也强烈建议你查看 find 和可能的 xargs 的手册页,这是一个强大的组合,你可以将 find 的输出通过管道传输到 xargs

答案3

查找自定义 bash 函数包:

https://github.com/Kiran-Bose/supreme

下载并安装基于 debian 的系统的 deb 文件。

功能概述

(1)打开应用程序----Firefox----计算器----设置

(2)管理文件 ----搜索 ----导航 ----快速访问

            |----Select File(s)
            |----Inverse Selection
            |----Make directory
            |----Make file
                                          |----Open
                                          |----Copy
                                          |----Move
                                          |----Delete
                                          |----Rename
                                          |----Send to Device
                                          |----Properties

(3)管理手机 ----从手机移动/复制 ----移动/复制到手机 ----同步文件夹

(4)管理USB ----从USB 移动/复制 ----移动/复制到USB

相关内容