将文件重命名为 PATH 的串联

rename files to concatenation of path

提问人:lemon chow 提问时间:5/16/2023 最后编辑:Bastienlemon chow 更新时间:5/16/2023 访问量:49

问:

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

bash shell 文件

答:

3赞 oguz ismail 5/16/2023 #1

您正在寻找类似这样的东西:

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

如果输出看起来不错,请删除。echo

0赞 Csabusr 5/16/2023 #2

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

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

评论

0赞 Bastien 5/16/2023
这并不能回答这个问题。请提供解决用户情况的解决方案,因为他们可能没有必要的知识来应用您提供的信息。