如何在不导航到目录的情况下复制具有唯一名称的文件?

nev*_*nd9 6 cp filenames file-copy command

假设我有一个具有唯一名称的文件(例如Screenshot20180509143013.png),我希望将其复制到 /media/SD256。

文件/media/drive1/Users/name/Pictures/Screenshots/Screenshot20180509143013.png纠结在一些子目录层次,我不想导航到/media/drive1/Users/name/Pictures/Screenshots/去发现那个具有唯一名称的文件。

相反,我希望在我的工作目录是 /media/drive1/ 时运行一个命令,它看起来类似于:

copy --find-filename-then-copy Screenshot20180509143*3.png /dev/media/SD256/DestinationFolder
Run Code Online (Sandbox Code Playgroud)

有没有这样的命令可以先找到文件再复制?

Jef*_*ler 14

随着zshfishksh -o globstarbash -O globstar(或之后shopt -s globstarbash)或tcshset globstaryash -o extended-glob

cp -- **/Screenshot20180509143*3.png /dev/media/SD256/DestinationFolder
Run Code Online (Sandbox Code Playgroud)

globstar 使用**语法进行递归搜索;如果 glob 的其余部分(文件名模式)是唯一的,那么您将获得所需的结果。请注意,我...3*3从您的示例中复制了,而不是Screenshot20180509143013.png问题前面的 eg 文件名。

注意:

  • fish并且 4.3 之前的 bash 版本在递归时将遵循符号链接。使用zsh,tcshyash,您可以使用***代替**来获得该行为。
  • fish 如果文件在当前目录中,则不会找到该文件。
  • 隐藏文件和隐藏目录中的文件将不被考虑。许多 shell 都可以dotglob选择重新启用它们。另请参阅 中的(D)glob 限定符zsh
  • zsh您可能还想([1])在模式的末尾添加。[1]是仅复制第一个匹配文件的 glob 限定符。
  • 如果文件位于多个目录中,该-i选项cp还可以防止意外覆盖。


Kus*_*nda 14

使用find

find . -type f -name Screenshot20180509143013.png -exec cp {} /dev/media/SD256/DestinationFolder ';'
Run Code Online (Sandbox Code Playgroud)

这将查找当前目录中或当前目录下的所有常规文件,其名称正好是Screenshot20180509143013.png. 找到的文件将被复制到/dev/media/SD256/DestinationFolder. 如果有多个具有相同名称的文件(您说没有),这些文件将在目标目录中相互覆盖。