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
随着zsh
或fish
或ksh -o globstar
或bash -O globstar
(或之后shopt -s globstar
的bash
)或tcsh
后set globstar
或yash -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
,tcsh
或yash
,您可以使用***
代替**
来获得该行为。fish
如果文件在当前目录中,则不会找到该文件。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
. 如果有多个具有相同名称的文件(您说没有),这些文件将在目标目录中相互覆盖。