有没有一种方法可以将文件从文件夹a复制到文件夹b,但是在每个文件之间将过程暂停一秒钟?我想将很多文件复制到监视文件夹,但是从经验中我知道,如果一次(通过终端cp或GUI)复制所有文件,这将使我的rtorrent崩溃...如果我可以复制文件它们之间有第二个间隔,这将使rtorrent有时间处理事情。如果我可以从一个命令执行此操作,那将使我免于手动进行一个接一个的操作。
在许多选项中,包括使用cp
和的循环sleep
,我们可以选择find
带有两个-exec
标志来运行那些确切的命令。
find ~/dir_1/ -type f -maxdepth 1 -exec cp {} ~/dir_2 \; -exec sleep 1 \;
这里的选项是:
~/dir_1
,它是原始目录,通过它find
可以工作。-type f
仅获取文件-maxdepth 1
在目录树中最多下降1级;防止下降到子目录-exec cp {} ~/dir_2 \;
将{}
参数指定的当前处理文件复制到~/dir_2
。在\;
对候任cp
在时间的折来折尽可能多的文件尽可能为处理单个文件{}
。\;
为了防止shell将其误解为命令终止符,必须使用反斜杠。exec sleep 1 \;
针对sleep 1
每个当前文件执行。如果文件中有文件列表,则可以执行以下操作:
xargs -I % --arg-file=input.txt sh -c 'cp % ~/dir_2/ ;sleep 1'
选项如下:
-I %
指定在命令中引用文件的符号--arg-file=input.txt
从特定文件读取命令参数sh -c 'cp % ~/dir_2/ ;sleep 1'
/bin/sh
通过-c '...'
标志使用提供的命令执行;%
将替换为文件名。您可以使用for循环
for f in "/path/to/folder_1"/*; do
cp "$f" "/path/to/folder_2/"
sleep 1
done
为了清楚起见,此格式设置为多行,但也可以作为单行使用。您也可以将其转换为函数:
delaycp(){
for f in "$1"/*; do
cp "$f" "$2"/
sleep 1
done
}
并将其用作
delaycp "/path/to/folder1" "/path/to/folder2"
另外,如果您只想复制某些文件,而不要复制*
glob在目录中捕获的所有内容,则可以始终使用路径名扩展(例如file{1..25}
)或输入文本文件(例如)input.txt
:
/path/to/folder_1/file1
/path/to/folder_1/file2
/path/to/folder_1/file3
然后从那里使用while IFS= read -r line
结构来读取文件:
while IFS= read -r line || [ -n "$line" ]; do
cp "$line" "/path/to/folder_2/${line##*/}"
sleep 1
done < input.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句