linux复制并粘贴两个最后一个增量文件名

时间:2015-08-19 08:21:57

标签: linux find cp

我想在linux中复制并粘贴文件,但我想只保留文件名的最后两个增量,例如我的代码生成一个文件列表:

aa001 bb001
aa002 bb002
aa003 bb003
aa004 bb004

所以我想保留最后两个增量(* 003 * 004),并复制到其他目录。

3 个答案:

答案 0 :(得分:0)

假设您的文件列表位于文件filelist

cat filelist | tail -n 2 | tr '\r\n' ' ' | xargs -d " " -L1 -I{} cp {} "tdir/"

请注意,如果您的代码生成了一个列表,您可以直接输入,而不是先将其写入filelist

Tail只会传递包含您要复制的文件的文件的最后两行。将-n 2更改为-n 1-n 3会更改将要复制的文件数。

Tr会将任何换行符转换为空格,这样xargs就可以很好地拆分新列表。

Xargs将调用cp,并将每个空格分隔值传送到其中,并将它们放入tdir

您可以将--verbose开关添加到xargs以查看它对cp进行的调用。

查看tail,tr和xargs的手册页以获取更多详细信息。

答案 1 :(得分:0)

假设您的目标文件夹为b,您可以像这样使用find

find -maxdepth 1 \
     -type f \
     -exec \
    bash -c 'f="$(basename "{}")";cp -v "$f" "b/${f##[a-z]*[a-z]}"'

创建一个单独的shell脚本可能会更好,更具可读性,该脚本执行复制工作并从find调用它:

copy.sh:

#!/bin/bash

source_file="$1"
source_basename="${source_file##*/}"

dest_folder="$2"

dest_file=${source_basename##[a-z]*[a-z]}
dest_file="$dest_folder/$dest_file"

cp -v "$source_file" "$dest_file"

然后这样称呼:

chmod +x copy.sh
source_path="/path/to/source"
dest_path="/path/to/dest"

find "$source_path" -maxdepth 1 -type f -exec ./copy.sh {} "$dest_folder" \;

答案 2 :(得分:-1)

感谢您的回答,我找到了另一种方式(受到第一个回复的启发),所以我做到了:

ls -1t aa* | head -2 |  tr '\r\n' ' ' | xargs -d " " -L1 -I{} cp {} "tdir/"

使用ls -1t aa * |的简单方法头-2,我恢复了最后修改的两个文件并以aa *开头,然后我在tdir目录中复制。