为 cp 命令复制长路径的最快方法是什么?

为 cp 命令复制长路径的最快方法是什么?

我正在 Windows 计算机上通过 SSH 控制基于 Linux 的 NAS。我想做的是使用 cp -al 命令快速将文件夹从一个目录复制到另一个目录,硬链接其中的所有文件。目前我所做的是用 ls 列出目录,然后用鼠标突出显示它,右键单击复制它,然后将其粘贴回,例如,如果我硬链接名为“Madagascar.2005.1080p.BluRay”的目录。 DTS.x264”我只复制该目录的名称,然后手动写出 cp -al "sourceDir/Movie/然后粘贴“Madagascar.2005.1080p.BluRay.DTS.x264”。我对第二个目录执行相同的操作来构建整个命令:

cp -al "sourceDir/Madagascar.2005.1080p.BluRay.DTS.x264" "dstDir/Movie/Madagascar.2005.1080p.BluRay.DTS.x264"

整个过程非常麻烦,而且当在 linux shell 上完成的所有其他操作都是在没有鼠标的情况下完成时感觉不自然。

有没有更好的方法来构建这个长命令,而不必使用鼠标复制和粘贴内容,或者手动输入整个名称?

编辑:我不想删除源目录。源目录大约如下所示:

'Lost S04 720p BluRay DTS x264
 Lost.S03.720p.BluRay.DTS.x264
'Million.Dollar.Extreme.Presents.World.Peace.S01.1080p'
'The Simpsons S01 1080p DSNP WEBRip DDP5.1 x264'
'The Simpsons S02 1080p DSNP WEBRip DDP5.1 x264'

我将经常更改源或目标目录。

答案1

因此,首先,您显然正在尝试像拥有合适的文件管理器一样工作。这不是犯罪,你应该使用它:)

传统上,Midnight Commander 是您应该使用的工具mc;您甚至可以直接将其安装在您的 NAS 上!

在当今时代,ranger(你说你使用的是 Debian,所以sudo apt install ranger确实如此。)可能更接近你想要的,感觉更现代。您可以使用 选择任何“窗格”中的多个文件space,然后按@对它们运行命令:您将:shell %s在屏幕底部看到 。当您按 Enter 键时,将%s扩展到所有选定的文件名,因此只需输入命令即可,然后:shell cp -al -t /dstDir/Movie %s按 Enter 键。就是这样。

然而,ranger它是一个强大的工具(也是如此mc,它至少有更突出的菜单!),10 分钟的教程可能会带来巨大的改变。


无需使用鼠标复制和粘贴内容,或手动输入整个名称?

您需要听说过除了tab最基本的 shell 之外的所有 shell 都具有的 -completion!输入任意文件名的首字母,然后点击tab。如果只有一个这样开始的文件,那么它就会完成。如果有多个选择,请按tab两次以获得候选列表。 (如果您使用zshoh-my-zsh 或其他一些优秀的 shell 扩展器而不是 bash,您将享受到更方便的完成功能)。

答案2

复制粘贴长文件名的最快方法是根本不复制粘贴!

(1) 使用变量:

例如:

cd sourceDir/  
OneDir=$(ls -d Mada*) # Make sure you get only One Directory ; no Copy with mouse !  
echo $OneDir # verify  
cp -al "$oneDir" "../dstDir/Movie/$OneDir" # Navigate to Dest Directory ; no Paste with mouse !  
OneDir=$(ls -d T*Sim*S01*)  
echo $OneDir  
cp -al $oneDir ../dstDir/Movie/$OneDir  
OneDir=$(ls -d T*Sim*S02*)  
echo $OneDir  
cp -al $oneDir ../dstDir/Movie/$OneDir  

(2) 使用脚本对其进行增强以使其自动化:

# Pseudo-Code  
cd sourceDir/  
for OneDir in $(ls -d *) {  # Use the "for" Syntax (& Quoting Syntax) according to your Shell  
    echo $OneDir  # You could include interactivity, to ask whether to Process Current OneDir or not  
    cp -al "$oneDir" "../dstDir/Movie/$OneDir"  
}  

答案3

你说你愿意,

使用该cp -al命令快速将文件夹从一个目录硬链接到另一个目录

但随后您将展示一次复制文件的过程。

如果您确实想要复制目录及其内容,此命令将一步完成所有操作:

cp -al sourceDir/. dstDir/Movie/

也许您想将选定的文件从您的目录移动sourceDir到不同的dstDir目录。您可以使用通配符来选取与某个模式匹配的一个或多个文件,或者Tab自动完成部分键入的名称(再次点击它以查看剩余匹配项的集合):

cp -al sourceDir/Lost* dstDir/Movie/

相关内容