回答:
フォルダーの内容を再帰的にコピーする場合(1つのエラーがスローされます。以下の選択肢があります):
cp -r * sub/
もう少しハックしますが、空でないサブディレクトリで動作します:
TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"
別のワンライナー:
TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done
または再帰的:
TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
find
コードに満足しています:D
xargs
またはを使用し-exec
ます。必要なしgrep
-使用! -name "$TARGETDIR"
または類似。の周りに比類のない引用符があり$file
ます。再帰cp
は、最初のコマンド以外では意図したとおりに機能するとは思わない。
仮にはtarget
あなたのシェルがbashのであれば、ターゲットサブディレクトリの名前です。
shopt -s extglob
cp -r !(target) target/
kshでは、直接行うことができますcp -r !(target) target/
。
zshのでは、あなたが行うことができsetopt ksh_glob
、その後cp -r !(target) target/
。setopt extended_glob
次に、別の可能性がありcp -r ^target target/
ます。
これにより、ターゲットディレクトリ自体を含まないドットファイルを含むすべてがターゲットディレクトリにコピーされますSUBDIR
。
for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done
これは、たとえばdirCopy.shファイルに含まれます
for i in `ls`
do
if [ $i != "subDir" ]
then
`cp -r $i subDir`
fi
done
コンソールで「sh dirCopy.sh」として実行します
ls
:for file in *
。バックティックは不要です-を使用します$()
。コマンドの$()
周りにバックティック(または)が不要です(cp
エラーメッセージが生成されます)。