gpt4 book ai didi

linux - bash:如何仅传输/复制文件名以分隔相似的文件?

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:14 24 4
gpt4 key购买 nike

我在文件夹 A 中有一些文件,其命名如下:

001_file.xyz
002_file.xyz
003_file.xyz

在一个单独的文件夹 B 中,我有这样的文件:

001_FILE_somerandomtext.zyx
002_FILE_somerandomtext.zyx
003_FILE_somerandomtext.zyx

现在,如果可能的话,我想在 bash 中使用命令行重命名文件夹 B 中的所有文件,并使用文件夹 A 中的文件名。文件扩展名必须保持不同。每个文件夹 A 和 B 中的文件数量完全相同,并且由于编号原因,它们的顺序相同。

我是个菜鸟,但我希望能找到一些简单的问题答案。

提前致谢!

ZVLKX

*为了澄清而编辑的示例

最佳答案

实现可能看起来有点像这样:

renameFromDir() {
useNamesFromDir=$1
forFilesFromDir=$2

for f in "$forFilesFromDir"/*; do

# Put original extension in $f_ext
f_ext=${f##*.}

# Put number in $f_num
f_num=${f##*/}; f_num=${f_num%%_*}

# look for a file in directory B with same number
set -- "$useNamesFromDir"/"${f_num}"_*.*
[[ $1 && -e $1 ]] || {
echo "Could not find file number $f_num in $dirB" >&2
continue
}
(( $# > 1 )) && {
# there's more than one file with the same number; write an error
echo "Found more than one file with number $f_num in $dirB" >&2
printf ' - %q\n' "$@" >&2
continue
}

# extract the parts of our destination filename we want to keep
destName=${1##*/} # remove everything up to the last /
destName=${destName%.*} # and past the last .

# write the command we would run to stdout
printf '%q ' mv "$f" "$forFilesFromDir/$destName.$f_ext"; printf '\n'
## or uncomment this to actually run the command
# mv "$f" "$forFilesFromDir/$destName.$f_ext"
done
}
<小时/>

现在,我们如何测试它?

mkdir -p A B
touch A/00{1,2,3}_file.xyz B/00{1,2,3}_FILE_somerandomtext.zyx
renameFromDir A B

鉴于此,输出为:

mv B/001_FILE_somerandomtext.zyx B/001_file.zyx
mv B/002_FILE_somerandomtext.zyx B/002_file.zyx
mv B/003_FILE_somerandomtext.zyx B/003_file.zyx

关于linux - bash:如何仅传输/复制文件名以分隔相似的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40699002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com