我正在 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两次以获得候选列表。 (如果您使用zsh
oh-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/