shell 将文件重命名为路径串联

yr9zkbsy  于 2023-05-18  发布在  Shell
关注(0)|答案(2)|浏览(171)
find "inputscan" -type f -exec sh -c 'file="$1"; folder=$(basename $(dirname "$file")); filename=$(basename "$file"); cp "$file" "$2/$folder"_"$filename"' sh {} "staging" \;

如果input_scan中有五个文件,如:

/inputscan
 /folder1
  /1.txt
   /folder2
    /2.txt
 /folder3
  /3.txt
4.txt

移动到暂存后的文件名应如下所示:

inputscan_folder1_1.txt
inputscan_folder1_folder2_2.txt
inputscan_folder3_3.txt
inputscan_4.txt

目前,我正在使用上述命令获取folder1_1.txt,folder2_2.txt,folder3_3.txt,inputscan_4.txt

ryoqjall

ryoqjall1#

你要找的是这样的东西:

find inputscan -type f -exec bash -c '
for src; do
  dest=staging/${src//\//_}
  echo mv "$src" "$dest"
done' bash {} +

如果输出良好,删除echo

umuewwlo

umuewwlo2#

尝试使用realpath。它显示了整个文件路径。从这些数据中,您可以轻松地剪切不必要的部分,并复制或移动文件。

$ realpath example.txt
  /home/username/example.txt

相关问题