bash if then cp as hardlinks
bash if then cp as hardlinks
我希望以下内容将所有文件硬链接到目标,但定义的目录除外。查找部分正在运行,但它不会复制任何文件。
#!/bin/sh
tag_select=
source=
dest="/backup/"
{
if [[ "" = "backup" ]]; then
find . -mindepth 1 -maxdepth 1 ! -name "dir1" ! -name "dir2" | while read line
do
cp -lr "" "$dest"
done
fi
}
请注意,我不想使用 rysnc,因为我想在目标中创建硬链接。提前致谢!
试试这个
#!/bin/sh
tag_select=;
source=;
dest="/backup/";
if [ "" = "backup" ]; then
find $source -mindepth 1 -maxdepth 1 ! -name "dir1" ! -name "dir2" -exec cp -lr {} "$dest" \;
fi
你的命令应该是
./code.sh backup source_folder_path
例子
./code.sh backup ~/Desktop
仅针对目录
中的文件尝试以下代码
find $source -maxdepth 1 -type f -exec sh -c "ln -f \"$(realpath {})\" \"$dest$(basename {})\"" \;
你不能硬 link 文件夹。
我猜你知道为什么 ""
没有出现在任何地方,所以我们假设你是正确的。您还了解,无论 find
发现什么文件名,您发现 source
(例如 ""
)的每个文件都将被 link 编辑为 $dest
,因为您使不使用用作 while read line
循环变量的 "$line"
。从问题中可以看出,您想 link source
中的所有文件 dest
(您必须确认这是您的意图)如果是这样, find
本身就是您所需要的,例如
find source -maxdepth 1 ! -name "dir1" ! -name "dir2" -execdir cp -lr '{}' "$dest" \;
这将找到 1 级的所有文件(和目录)和 hardlink dest 中的每个文件。如果那不是您的意图,请告诉我,我很乐意进一步提供帮助。你原来的帖子有点不透明 shell 炖...
用一个简单的 glob 替换你的 find
命令;这也有利于 任何 有效文件名,而不仅仅是那些没有换行符的文件名。
#!/bin/sh
tag_select=
source=
dest="/backup/"
if [ "" = "backup" ]; then
for f in "$source"/*; do
case $f in
dir1|dir2) continue ;;
esac
cp -lr "$f" "$dest"
done
fi
我希望以下内容将所有文件硬链接到目标,但定义的目录除外。查找部分正在运行,但它不会复制任何文件。
#!/bin/sh
tag_select=
source=
dest="/backup/"
{
if [[ "" = "backup" ]]; then
find . -mindepth 1 -maxdepth 1 ! -name "dir1" ! -name "dir2" | while read line
do
cp -lr "" "$dest"
done
fi
}
请注意,我不想使用 rysnc,因为我想在目标中创建硬链接。提前致谢!
试试这个
#!/bin/sh
tag_select=;
source=;
dest="/backup/";
if [ "" = "backup" ]; then
find $source -mindepth 1 -maxdepth 1 ! -name "dir1" ! -name "dir2" -exec cp -lr {} "$dest" \;
fi
你的命令应该是
./code.sh backup source_folder_path
例子
./code.sh backup ~/Desktop
仅针对目录
中的文件尝试以下代码find $source -maxdepth 1 -type f -exec sh -c "ln -f \"$(realpath {})\" \"$dest$(basename {})\"" \;
你不能硬 link 文件夹。
我猜你知道为什么 ""
没有出现在任何地方,所以我们假设你是正确的。您还了解,无论 find
发现什么文件名,您发现 source
(例如 ""
)的每个文件都将被 link 编辑为 $dest
,因为您使不使用用作 while read line
循环变量的 "$line"
。从问题中可以看出,您想 link source
中的所有文件 dest
(您必须确认这是您的意图)如果是这样, find
本身就是您所需要的,例如
find source -maxdepth 1 ! -name "dir1" ! -name "dir2" -execdir cp -lr '{}' "$dest" \;
这将找到 1 级的所有文件(和目录)和 hardlink dest 中的每个文件。如果那不是您的意图,请告诉我,我很乐意进一步提供帮助。你原来的帖子有点不透明 shell 炖...
用一个简单的 glob 替换你的 find
命令;这也有利于 任何 有效文件名,而不仅仅是那些没有换行符的文件名。
#!/bin/sh
tag_select=
source=
dest="/backup/"
if [ "" = "backup" ]; then
for f in "$source"/*; do
case $f in
dir1|dir2) continue ;;
esac
cp -lr "$f" "$dest"
done
fi