【问题标题】:Renaming folders and files in subdirectories using text file linux使用文本文件linux重命名子目录中的文件夹和文件
【发布时间】:2021-11-08 00:51:53
【问题描述】:

我正在尝试使用以空格分隔的文本文件重命名文件和目录。

文本文件如下所示:

dir1-1 dir1_1
dir2-1 dir223_1

我的命令如下:

xargs -r -a files.txt -L1 mv

此命令只能将文件夹从 dir1-1 重命名为 dir1_1dir2-1 重命名为 dir223_1 等等,但它不会重命名子目录中的文件。对应目录下的文件也有这些目录的前缀。

期待帮助。

【问题讨论】:

  • “子目录中的文件”是什么意思?如果dir1 移动,那么dir1/dir2/foo 变成dir1_1/dir2/bar,所以它肯定被移动了。您是否希望将dir1/dir2 移至dir1_1/dir2_1
  • 这些目录中的文件也有 dir1.txt dir1_extra.gz 之类的名称,所以我想将 dir1 的所有内容重命名为 dir1_1,包括文件及其各自的目录。

标签: linux file directory command rename


【解决方案1】:

假设您的文件/目录名称中没有特殊字符(制表符的空格...), 试试

perl_script=$(
echo 'chop($_); $orig=$_;'
while read -r src tgt; do
    echo 'if (s{(.*)/'"$src"'([^/]*)}{$1/'"$tgt"'\2}) { print "$orig $_\n";next;}'
done < files.txt)
find . -depth | perl -ne "$perl_script" | xargs -r -L1 echo mv

看到 echo 符合您的要求后,请删除它。

【讨论】:

  • 文件名中有破折号。
猜你喜欢
  • 2012-01-18
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 2015-10-26
相关资源
最近更新 更多